从类方法创建新的类实例

发布于 2021-01-29 15:07:23

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

organism = Organism()

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

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

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

关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看