如果有一類有沒有辦法在猴子補丁中爲類__init__方法添加參數?
Class A:
def __init__(arg1, kwarg1=...):
...something happens here with args and kwargs
是有辦法由猴子修補這個類來添加另一種說法?如何保持在__init__
發生的一切,而不是在任何地方重複?
如果有一類有沒有辦法在猴子補丁中爲類__init__方法添加參數?
Class A:
def __init__(arg1, kwarg1=...):
...something happens here with args and kwargs
是有辦法由猴子修補這個類來添加另一種說法?如何保持在__init__
發生的一切,而不是在任何地方重複?
你也許可以通過繼承來做同樣的事情,並且不需要猴子補丁。你可以添加新的位置參數,或者只是將更多物品投入到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
這工作:
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
這基本上是我在下面的答案。 –
@Alex G賴斯:問題是關於猴子補丁,你的答案不是,我不能單獨使用繼承,因爲我無法觸及從我正在修補等的類繼承的類 – Bob
我明白了 - 對不起,我誤解了這個問題。很高興你通過繼承和猴子補丁的組合解決了它。 –
爲什麼你需要猴子的修補程序初始化特別?你能直接添加新的屬性到實例嗎? –
例如,您可能希望將某些行爲分開,如登錄到程序的單獨部分。 –