一个类的许多实例

时间:2009-01-01 18:47:33

标签: python class object multiple-instances

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

所以,我的问题:

如何自动为对象命名?

我正在考虑创建一个“牧群”类,它可以同时存在于所有类型的动物中......

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

喜欢这个吗?

class Animal( object ):
    pass # lots of details omitted


herd= [ Animal() for i in range(10000) ]

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

答案 2 :(得分:4)

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

>>> 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

答案 3 :(得分:2)

你可以创建一个带有name属性的'animal'类。

或者

你可以像这样编程定义类:


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

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

答案 4 :(得分:1)

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

class Ungulate(Mammal):
    hoofed = True

等同于

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