2016-12-21 53 views
2

如果有一類有沒有辦法在猴子補丁中爲類__init__方法添加參數?

Class A: 
    def __init__(arg1, kwarg1=...): 
     ...something happens here with args and kwargs 

是有辦法由猴子修補這個類來添加另一種說法?如何保持在__init__發生的一切,而不是在任何地方重複?

+0

爲什麼你需要猴子的修補程序初始化特別?你能直接添加新的屬性到實例嗎? –

+0

例如,您可能希望將某些行爲分開,如登錄到程序的單獨部分。 –

回答

0

你也許可以通過繼承來做同樣的事情,並且不需要猴子補丁。你可以添加新的位置參數,或者只是將更多物品投入到kwargs中。事情是這樣的:

Class A: 
    """same class A as before""" 
    def __init__(self, arg1, kwarg1=...): 
     ...something happens here with args and kwargs 

Class B(A): 
    def __init__(self, another_arg, arg, **kwargs): 
     A.__init__(self, arg, **kwargs) 
     # B does something with another_arg here 
1

這工作:

from package import module 

class ChangedInitClass(module.SomeClass): 
    def __init__(self, arg1, another_arg, kwarg1=...): 
     super().__init__(arg1, kwarg1=kwarg1) 
     # does something with another_arg 

module.SomeClass = ChangedInitClass 
+0

這基本上是我在下面的答案。 –

+0

@Alex G賴斯:問題是關於猴子補丁,你的答案不是,我不能單獨使用繼承,因爲我無法觸及從我正在修補等的類繼承的類 – Bob

+1

我明白了 - 對不起,我誤解了這個問題。很高興你通過繼承和猴子補丁的組合解決了它。 –

相關問題