![](/img/trans.png)
[英]How to create new instance of current class inside the current class method?
[英]return new instance of current class
我想返回當前類的新實例,當繼承的類返回時,它將返回基類而不是當前類
class class1:
def __init__(self):
self.foo = 1
self.bar = 2
def new(self):
return class1()
class class2(class1):
def __init__(self):
super().__init__()
c1 = class1()
c2 = class2()
print(c1.new())
print(c2.new())
這回來
< 主 .class1對象位於0x0000027B681E57F0>
< 主 .class1對象位於0x0000027B681E57F0>
理想的結果
< 主 .class1對象位於0x0000027B681E57F0>
< 主 .class2對象位於0x0000027B681E57F0>
定義一個類方法:
class Class1:
def __init__(self):
self.foo = 1
self.foo = 2
@classmethod
def new(cls):
return cls()
class Class2(Class1):
pass
現在,當您調用c2.new()
,運行時將看到Class2
沒有名為new
方法,而Class1
有。 此外, Class2
將作為隱式參數傳遞給new
,而不是Class1
。
類方法比實例方法更合適,因為除了對象是什么類之外,您對對象調用該方法沒有其他興趣。
您可以為此使用__class__
:
class class1(object):
def new(self):
return self.__class__()
class class2(class1):
pass
c1 = class1()
c2 = class2()
print(c1.new())
print(c2.new())
您可以像這樣獲得當前的類:
class class1:
def __init__(self):
self.foo = 1
self.bar = 2
def new(self):
return self.__class__()
繼承者將返回自己的類。 但是,您必須自己處理任何不同的__init__
簽名的邏輯。 除非您需要當前實例中的信息來創建新實例,否則一種類方法將是更好的設計選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.