Python继承:在父类中创建子对象

时间:2018-02-05 16:24:27

标签: python inheritance

我有一个父类,有一个返回新对象的方法。我希望该对象与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"返回子组(执行一系列代数运算),我有许多使用此方法的子类。

1 个答案:

答案 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

相关问题