我有一个对象上的方法,返回该类别的新实例。 我正在尝试找出编写此方法最惯用的方法,使其生成相同类型的新对象而不重复代码。
由于此方法使用实例的数据,因此我的第一次尝试是:
class Foo(object):
def get_new(self):
data = # Do interesting things
return Foo(data)
然而,如果我继承Foo并且不重写get_new方法,在SubFoo上调用get_new将返回一个Foo!因此,我可以编写一个classmethod:
class Foo(object):
@classmethod
def get_new(cls, obj):
data = # Munge about in objects internals
return cls(data)
然而,我正在访问的数据是针对对象特定的,因此如果这不是一个“普通”的(未装饰的)方法,似乎会破坏封装性。此外,您还必须像这样调用它:SubFoo.get_new(sub_foo_inst)
,这似乎是多余的。我希望对象只需“知道”返回哪种类型——与自身相同的类型!我想,还可以在类中添加一个工厂方法,并在各个地方覆盖返回类型,而不需要重复逻辑,但这似乎会给子类带来很多工作。
所以,我的问题是,如何编写一种方法,使其在不必在所有地方注释类型的情况下,能够灵活地处理类的类型?