python继承:返回子类

Python Inheritance : Return subclass

我在一个超类中有一个函数,它返回自己的新版本。我有这个super的一个子类,它继承了特定的函数,但我希望它返回子类的一个新版本。如何对其进行编码,以便当函数调用来自父级时,它返回父级的版本,但当从子级调用时,它返回子级的新版本?


如果new不依赖self使用classmethod:

1
2
3
4
5
6
7
8
9
10
11
12
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的类别:

1
2
3
4
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)