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