我一直在閱讀有關時__new__()
不會對計算器Inheritance when __new__() doesn't return instance of class返回類的實例返回類的實例,我知道這個問題是蟒蛇3.馬亭彼得斯說,可以通過name mangling完成,並在課堂上直接手動調用它,並在課堂中完全初始化它。繼承時__new __()不蟒蛇2.7.12
我想在python 2.7.12中試試。我可以管理的第一種和第二種方法,但對於第三種方法會產生TypeError
。
這是我的代碼,第一次嘗試:
class A:
def __new__(cls, p1, p2):
self = object.__new__(cls)
self.p1 = p1
self.p2 = p2
return [self]
class B(A):
def __new__(cls, p3):
self = super(B,cls).__new__(cls,1,2)
self[0].p3 = p3
return self
這給了我TypeError: super() argument 1 must be type, not classobj
第二次嘗試:
class A(object):
def __new__(cls, p1, p2):
self = object.__new__(cls)
self.p1 = p1
self.p2 = p2
return [self] #return not instance
class B(A):
def __new__(cls, p3):
self = super(B,cls).__new__(cls,1,2)
self[0].p3 = p3
return self
這給了我TypeError: __new__() takes exactly 2 arguments (1 given)
。
爲什麼會出現這種情況,這可以在python 2.7.12中實現,還是這種技術不兼容?
你的第二次嘗試的作品就好了。我。你忘了通過一個論點? –
另一個問題是關於如何調用'__init __()'當一個子類擁有不同數量的參數時,通常'__init__'只會被調用*一次*。你在這裏沒有做任何事情,這只是簡單的'__new__'覆蓋。 –
是的,我忘記傳遞參數 –