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

2024-09-30 06:30:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

#!/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参数,因为这是我不希望编写插件的用户感到麻烦的事情。在


Tags: self插件框架configbininitdef基类
2条回答

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

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

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

#!/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保持不变。在

相关问题 更多 >

    热门问题