我正在尝试提供允许人们编写自己的插件的框架。这些插件基本上是派生类。我的基类需要一些变量来初始化,如何初始化我的基类而不必让我的派生类在基类初始化中提供变量?
#!/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参数,因为我不希望编写插件的用户受到干扰。
答案 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}}未改变。