从类中生成新对象的惯用Python

2024-04-20 03:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一个对象上有一个方法,该方法返回同一类的一个新实例。我试图找出编写此方法的最惯用方法,以便它在不复制代码的情况下生成相同类型的新对象。

由于此方法使用来自实例的数据,因此我的第一步是:

class Foo(object):
    def get_new(self):
        data = # Do interesting things
        return Foo(data)

但是,如果我对Foo进行子类划分,并且不重写get_new,那么在subfo上调用get_new将返回Foo!所以,我可以写一个类方法:

class Foo(object):

    @classmethod
    def get_new(cls, obj):
        data = # Munge about in objects internals
        return cls(data)

然而,我正在访问的数据是特定于对象的,因此它似乎破坏了封装,使其不是“普通”(未修饰)方法。另外,您必须像SubFoo.get_new(sub_foo_inst)那样调用它,这似乎是多余的。我希望对象只是“知道”要返回哪种类型——与它本身的类型相同!

我想也可以在类中添加一个工厂方法,并在任何地方重写返回类型,而不复制逻辑,但这似乎会给子类带来很多工作。

所以,我的问题是,编写一个在类类型上提供灵活性而不必到处注释类型的方法的最佳方法是什么?


Tags: 数据对象实例方法类型newdataget