我想返回当前类的新实例,当一个继承的类返回它将返回基类而不是当前类
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())
返回
< main .class1对象位于0x0000027B681E57F0>
< main .class1对象位于0x0000027B681E57F0>
期望的结果
< main .class1对象位于0x0000027B681E57F0>
< main .class2对象位于0x0000027B681E57F0>
答案 0 :(得分:1)
改为定义一个类方法:
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
。
类方法比实例方法更合适,因为你不会对调用方法的对象产生任何其他兴趣。
答案 1 :(得分:0)
您可以使用__class__
:
class class1(object):
def new(self):
return self.__class__()
class class2(class1):
pass
c1 = class1()
c2 = class2()
print(c1.new())
print(c2.new())
答案 2 :(得分:0)
你可以得到这样的当前课程:
class class1:
def __init__(self):
self.foo = 1
self.bar = 2
def new(self):
return self.__class__()
继承者将返回自己的类。但是,您必须自己处理任何不同__init__
签名的逻辑。除非您需要当前实例中的信息来创建新的方法,否则类方法将是更好的设计选择。