我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象:
organism = Organism()
我希望能够调用organism.reproduce()并拥有两个有机体类型的对象。此时我的方法如下所示:
organism.reproduce()
class Organism(object): def reproduce(): organism = Organism()
并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有organism = Organism())一样,该副本是可访问的?
class Organism(object): def reproduce(self): #use self here to customize the new organism ... return Organism()
另一个选项-如果self方法中未使用实例():
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或从子类调用的子类):
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()