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