我正在尝试用各种动物在 python 中编写一个生活模拟。不可能命名我要使用的类的每个实例,因为我无法知道会有多少。
所以,我的问题:
如何自动为对象命名?
我正在考虑创建一个“牧群”类,它可以让所有这种类型的动物同时活着......
我正在尝试用各种动物在 python 中编写一个生活模拟。不可能命名我要使用的类的每个实例,因为我无法知道会有多少。
所以,我的问题:
如何自动为对象命名?
我正在考虑创建一个“牧群”类,它可以让所有这种类型的动物同时活着......
嗯,你通常只是把所有这些实例都放在一个列表中,然后如果你想对它们做点什么,就遍历这个列表。如果您想自动跟踪创建的每个实例,您还可以在类的构造函数中隐式添加到列表中,或者创建一个工厂方法来跟踪创建的实例。
像这样?
class Animal( object ):
pass # lots of details omitted
herd= [ Animal() for i in range(10000) ]
此时,herd 将拥有Animal
该类的 10,000 个不同的实例。
如果您需要一种方法来单独引用它们,那么让类在初始化时为每个实例提供一个唯一标识符是相对常见的:
>>> 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
您可以使用名称属性创建一个“动物”类。
或者
您可以像这样以编程方式定义类:
from new import classobj
my_class=classobj('Foo',(object,),{})
发现这个: http ://www.gamedev.net/community/forums/topic.asp?topic_id=445037
任何实例都可以有一个名称属性。所以听起来您可能会问如何动态命名一个类,而不是一个实例。如果是这种情况,您可以显式设置类的 __name__ 属性,或者更好地使用内置类型(使用 3 个参数)创建类。
class Ungulate(Mammal):
hoofed = True
相当于
cls = type('Ungulate', (Mammal,), {'hoofed': True})