小编典典

从类方法创建新的类实例

python

我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象:

organism = Organism()

我希望能够调用organism.reproduce()并拥有两个有机体类型的对象。此时我的方法如下所示:

class Organism(object):
    def reproduce():
        organism = Organism()

并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有organism = Organism())一样,该副本是可访问的?


阅读 338

收藏
2021-01-20

共1个答案

小编典典

class Organism(object):
    def reproduce(self):
        #use self here to customize the new organism ...
        return Organism()

另一个选项-如果self方法中未使用实例():

class Organism(object):
    @classmethod
    def reproduce(cls):
        return cls()

这样可以确保生物产生更多的生物,以及(源自生物的假想的博格产生更多的博格)。

无需使用的另一个好处self是,除了可以从实例调用之外,现在还可以直接从类中调用它:

new_organism0 = Organism.reproduce()  # Creates a new organism
new_organism1 = new_organism0.reproduce()  # Also creates a new organism

最后,如果在方法中同时使用了实例(self)和类(Organism或从子类调用的子类):

class Organism(object):
    def reproduce(self):
        #use self here to customize the new organism ...
        return self.__class__()  # same as cls = type(self); return cls()

在每种情况下,您都可以将其用作:

organism = Organism()
new_organism = organism.reproduce()
2021-01-20