【问题标题】:Many instances of a class一个类的许多实例
【发布时间】:2009-01-01 18:47:32
【问题描述】:

我正在尝试用 python 编写各种动物的生活模拟。不可能为我要使用的类的每个实例命名,因为我无法知道会有多少。

所以,我的问题:

如何自动为对象命名?

我正在考虑创建一个“牧群”类,它可以让所有该类型的动物同时活着......

【问题讨论】:

    标签: python class object multiple-instances


    【解决方案1】:

    嗯,您通常只需将所有这些实例都放在一个列表中,然后如果您想对它们做某事,就遍历该列表。如果您想自动跟踪创建的每个实例,您还可以在类的构造函数中隐式添加到列表中,或者创建一个工厂方法来跟踪创建的实例。

    【讨论】:

    • +1:对象不必位于不同的变量中...对象列表很好。
    【解决方案2】:

    像这样?

    class Animal( object ):
        pass # lots of details omitted
    
    
    herd= [ Animal() for i in range(10000) ]
    

    此时,herd 将拥有 10,000 个不同的 Animal 类实例。

    【讨论】:

    • +1 表示新的习语,herd = [Animal() for i in range(n)]。这不是 Dolittle 博士——这些动物没有名字。哈哈
    【解决方案3】:

    如果您需要一种方法来单独引用它们,则让类在初始化时为每个实例赋予唯一标识符是相对常见的:

    >>> import itertools
    >>> class Animal(object):
    ...     id_iter = itertools.count(1)
    ...     def __init__(self):
    ...             self.id = self.id_iter.next()
    ... 
    >>> print(Animal().id)
    1
    >>> print(Animal().id)
    2
    >>> print(Animal().id)
    3
    

    【讨论】:

    • 我不知道这能回答问题,但我需要它来做其他事情。
    【解决方案4】:

    你可以创建一个带有 name 属性的“动物”类。

    或者

    您可以像这样以编程方式定义类:

    
    from new import classobj
    my_class=classobj('Foo',(object,),{})
    
    

    发现这个: http://www.gamedev.net/community/forums/topic.asp?topic_id=445037

    【讨论】:

      【解决方案5】:

      任何实例都可以有一个名称属性。所以听起来你可能会问如何动态命名一个,而不是一个实例。如果是这种情况,您可以显式设置类的 __name__ 属性,或者更好的是使用内置 type(带有 3 个参数)创建类。

      class Ungulate(Mammal):
          hoofed = True
      

      相当于

      cls = type('Ungulate', (Mammal,), {'hoofed': True})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-02
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2013-05-26
        相关资源
        最近更新 更多