代码之家  ›  专栏  ›  技术社区  ›  Joshua

类的许多实例

  •  4
  • Joshua  · 技术社区  · 17 年前

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

    所以,我的问题是:

    如何自动给对象命名?

    我在想创造一个“羊群”类,同时也可以是所有的动物。

    5 回复  |  直到 17 年前
        1
  •  8
  •   Blair Conrad    17 年前

    嗯,好吧,你通常只是把所有这些实例都塞进一个列表中,然后如果你想对它们做些什么的话,在这个列表上迭代。如果您希望自动跟踪创建的每个实例,还可以将列表添加到类的构造函数中,或者创建一个跟踪创建实例的工厂方法。

        2
  •  5
  •   S.Lott    17 年前

    这样地?

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

    此时,herd将有10000个不同的 Animal 班级。

        3
  •  4
  •   cdleary    17 年前

    如果需要一种单独引用它们的方法,则类在初始化时为每个实例提供唯一的标识符是比较常见的:

    >>> 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
  •  2
  •   Jiaaro    17 年前

    你可以用name属性创建一个“animal”类。

    或

    您可以编程定义类,如下所示:

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

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

        5
  •  1
  •   A. Coady    17 年前

    任何实例都可以有name属性。所以听起来你可能在问如何动态命名 班 不是一个 实例 . 如果是这样的话,你可以显式地设置一个类的γ-NaveEngy属性,或者更好的是用内置函数创建类。 type (带3个参数)。

    class Ungulate(Mammal):
        hoofed = True
    

    相当于

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