我有一个父类,有一个返回新对象的方法。我希望该对象与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()
此处D = C.copy()
的类型为Parent,无论类C
如何。我希望复制返回与C
相同的类的实例,同时保留" some_complicated_stuff"部分在父类中,以避免代码重复。
上下文:父是一个抽象的组结构," copy"返回子组(执行一系列代数运算),我有许多使用此方法的子类。
答案 0 :(得分:1)
您可以使用以下事实:每个实例都有一个指向__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。