使用不是派生类的变量初始化基类

时间:2012-03-19 23:42:40

标签: 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 UserPlugin(BaseClass):
    def __init__(self,config):
        BaseClass.__init__(self,config)
    def doSomething(self):
        print "Something"


fubar = UserPlugin('/tmp/config.cfg')
fubar.showConfig()

我的目标是避免在UserPlugin类中定义config参数,因为我不希望编写插件的用户受到干扰。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

根据你的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值,并留下{{ 1}}未改变。