我正在尝试用各种动物在python中编写一个生命模拟。我不可能命名我将要使用的每个类的实例,因为我无法知道将会有多少。
所以,我的问题:
如何自动为对象命名?
我正在考虑创建一个“牧群”类,它可以同时存在于所有类型的动物中......
答案 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})