Python 使用不来自派生类的变量初始化基类

Python 使用不来自派生类的变量初始化基类,python,class,inheritance,Python,Class,Inheritance,我试图提供一个框架,允许人们编写自己的插件。这些插件基本上是派生类。我的基类需要一些变量来初始化,如何初始化基类而不必让派生类在基类初始化中提供变量 #!/bin/python class BaseClass(): def __init__(self,config): self.config=config def showConfig(self): print "I am using %s" % self.config class UserPl

我试图提供一个框架,允许人们编写自己的插件。这些插件基本上是派生类。我的基类需要一些变量来初始化,如何初始化基类而不必让派生类在基类初始化中提供变量

#!/bin/python

class BaseClass():
    def __init__(self,config):
        self.config=config
    def showConfig(self):
        print "I am using %s" % self.config

class UserPlugin(BaseClass):
    def __init__(self,config):
        BaseClass.__init__(self,config)
    def doSomething(self):
        print "Something"


fubar = UserPlugin('/tmp/config.cfg')
fubar.showConfig()
我的目标是避免在UserPlugin类中定义config参数,因为我不希望编写插件的用户为此烦恼。

您可以使用它将任何剩余参数传递给基类:

class UserPlugin(BaseClass):
    def __init__(self, *args, **kwargs):
        BaseClass.__init__(self, *args, **kwargs)

根据你的Pastebin代码,这个怎么样?这避免了使用单独的全局属性,而是使用类属性,该属性可以作为所有派生类及其实例的成员访问

#!/bin/python

class BaseClass():
    config = '/tmp/config.cfg'
    def __init__(self):
        pass
    def showConfig(self):
        print "I am using %s" % self.config

class UserPlugin(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
    def doSomething(self):
        print "Something"


fubar = UserPlugin()
fubar.showConfig()

这是我之前提到的另一种方法。请记住,如果要更改
BaseClass.config
本身的值,应该直接访问它(即
BaseClass.config='/foo/path'
;否则,您将创建一个自定义
UPinstance.config
值,而
BaseClass.config
保持不变。

我不理解您的问题。我知道当
UserPlugin
被实例化时,您不希望插件创建者必须传递配置路径。但是在哪里那么,是否希望配置路径来自?是否希望具有默认配置路径?此外,只有在实例化基类时才会初始化基类。当实例化
UserPlugin
时,您调用
BaseClass.\uu init\uuu()
,但您正在初始化一个
UserPlugin
实例。感谢您重新表述我的问题,因为正是这样。我知道启动UserPlugin时会启动基类。底线是,我希望UserPlugin能够以一种干净的方式从基类继承方法,而基类需要一个变量来启动,而无需传递我认为也有可能忘记继承,先初始化基类,然后在基类内初始化UserPlugin,但我发现这有点难看。但你仍然没有回答我的问题。不过,你希望配置路径来自哪里?配置路径可以来自任何只要它不需要通过UserPlugin类就可以了。是的,我理解,但这与发布的代码没有太大区别,这是我希望以某种方式避免的事情。我想我必须忘记类继承,在启动的基类内启动插件类或类似的东西。不过,谢谢你提供的信息。我确实理解对象和继承是如何工作的。我的实际目标是让UserPlugin类不受正确初始化基类所需的任何限制。这听起来很愚蠢,从某种程度上说是这样,但我想保留“要求”使派生类尽可能低。这是一个组织问题,而不是语法问题。与此同时,我想到了为基类初始化所需的变量创建全局变量。请看这里,全局变量并不理想,如果可能的话应该避免,但我认为在我的情况下,它是最好的选择。@jay\u t,我不这么认为是您最好的选择。您可以将其存储为类属性。请参见上文。