2012-03-19 110 views
3

我試圖提供允許人們編寫自己的插件的框架。這些插件基本上是派生類。我的基類需要一些變量來初始化,我怎樣才能初始化我的基類,而不必讓我的派生類在基類初始化中提供變量?初始化變量不是來自派生類的基類

#!/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類的配置參數,因爲這是我不希望誰寫與困擾插件用戶。

+0

我不明白你的問題。我在實例化UserPlugin時得到的結果是,你不希望插件創建者必須傳遞一個配置路徑,但是你希望你的配置路徑來自哪裏?那麼你想要一個默認的配置路徑?初始化你的基類只會在你實例化你的基類時發生,當你實例化一個'UserPlugin'時,你_call_'BaseClass .__ init __()',但你正在初始化一個'UserPlugin'實例 – senderle 2012-03-19 23:58:02

+0

感謝你的改寫我的問題,因爲這就是它。我明白,啓動UserPlugin時啓動BaseClass 。底線是,我想要一個乾淨的方式讓UserPlugin從BaseClass繼承方法,它需要一個變量來啓動而不將該變量傳遞給派生類。 我想也可能是忘記繼承並首先啓動基類,然後啓動BaseClass中的UserPlugin,但我覺得有點難看。 – 2012-03-20 09:39:33

+0

但你仍然沒有回答我的問題。你想從哪裏得到配置路徑?儘管如此,我採取了瘋狂的猜測(http://stackoverflow.com/a/9786902/577088)。 – senderle 2012-03-20 12:39:57

回答

1

您可以使用argument lists任何剩餘的參數傳遞給基類:

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

是的,我明白了,但是這與發佈的代碼沒有太大的區別,並且這是我想要以某種方式避免的。我想我將不得不忘記類繼承,並啓動啓動的基類內的插件類或類似的東西。謝謝你的信息。 – 2012-03-20 10:17:12

1

根據您的引擎收錄的代碼,這個怎麼樣?這避免了使用單獨的全局變量,而是使用一個類屬性,該屬性可作爲所有派生類及其實例的成員進行訪問。

#!/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不變

+0

我很明白對象和繼承是如何工作的。我的實際目標是讓UserPlugin類免費正確地初始化基類所需的任何東西。這聽起來很愚蠢,而且也是這樣,但我想保留「要求」,使派生類儘可能低。這不是一個語法問題,而是一個組織問題。與此同時,我想到了讓BaseClass需要初始化變量的全局變量。看到這裏http://pastebin.com/KfdVYbPz全局並不理想,應儘可能避免,但我認爲對我來說這是最好的選擇。 – 2012-03-20 13:09:04

+0

@jay_t,我不認爲這是你最好的選擇。您可以將它作爲類屬性存儲。往上看。 – senderle 2012-03-20 13:46:25