Python继承:返回子类

时间:2011-10-20 19:05:52

标签: python inheritance

我在超类中有一个返回其自身新版本的函数。我有一个继承特定函数的超类的子类,但宁愿它返回子类的新版本。我如何对其进行编码,以便当函数调用来自父级时,它返回父级的一个版本,但是当从子级调用它时,它会返回该子级的新版本?

1 个答案:

答案 0 :(得分:6)

如果new不依赖self,请使用classmethod:

class Parent(object):
    @classmethod
    def new(cls,*args,**kwargs):
        return cls(*args,**kwargs)
class Child(Parent): pass

p=Parent()
p2=p.new()
assert isinstance(p2,Parent)
c=Child()
c2=c.new()
assert isinstance(c2,Child)

或者,如果new确实取决于self,请使用type(self)来确定self的班级:

class Parent(object):
    def new(self,*args,**kwargs):
        # use `self` in some way to perhaps change `args` and/or `kwargs`
        return type(self)(*args,**kwargs)