【发布时间】:2017-06-21 21:59:57
【问题描述】:
我想在一个类(Parent)中创建一个方法(比如copy),该方法将返回调用它的类或子类的对象。我想要type(x) == type(x.copy())。
我尝试过的所有方法都不令人满意。
- 使用超类构造函数返回超类(有道理,但我认为值得一试)。
- 在超类使用的每个子类中创建一个函数
init_me,但这违背了继承的目的。 - 我开始探索
__new__和__init__,但很快决定 Python 一定有更好的方法。
示例代码
class Parent(object):
def __init__(self, p1=p1_default, p2=p2_default, p3=p3_default):
... # common stuff
self._special_suff()
def copy_works_if_subclass_does_extra(self):
return self.init_me()
def copy_only_does_superclass(self):
return Parent()
def copy_with_init(self):
return self.__init__()
def whoami(self):
print('I am just a parent')
class Dad(Parent):
def _special_stuff():
... # Dad special stuff
return
def whoami(self):
print('I am a dad')
def init_me(self):
return Dad()
class Mom(Parent):
def _special_stuff():
... # Mom special stuff
return
def whoami(self):
print('I am a mom')
【问题讨论】:
标签: python python-3.x inheritance constructor polymorphism