我有一个父类,它有一个返回新对象的方法。我希望该对象与 self 具有相同的类型(即,如果在 Parent 类中调用,则为 Parent,如果在 Child 实例中调用,则为 Child)。
class Parent(object):
def __init__(self,param):
self.param = param
def copy(self):
new_param = some_complicated_stuff(self.param)
return Parent(new_param)
class Child(Parent):
pass
C = Child(param)
D = C.copy()
此处,无论 C
类如何,D = C.copy()
都将是 Parent 类型。我想让 copy 返回与 C 相同的类的实例,同时将“some_complicated_stuff”部分保留在父类中以避免代码重复。
上下文:Parent是一个抽象的组结构,“复制”返回子组(进行一系列代数运算),并且我有许多不同的Child类使用此方法。
最佳答案
您可以利用以下事实:每个实例在 __class__
下都有一个指向其类的指针:
class Parent(object):
def __init__(self,param):
self.param = param
def copy(self):
new_param = some_complicated_stuff(self.param)
return self.__class__(new_param)
这将是上述类的Parent
,但在派生类中将是Child
。
除了 self.__class__
,您还可以使用 type(self)
,如 @Eli Korvigo曾说过in the comments ,或如前所述here .
关于Python继承: create child object in parent class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48626989/