Muchas instancias de una clase.

Estoy tratando de escribir una simulación de vida en python con una variedad de animales. Es imposible nombrar cada instancia de las clases que voy a usar porque no tengo forma de saber cuántas habrá.

Entonces, mi pregunta:

¿Cómo puedo automáticamente dar un nombre a un objeto?

Estaba pensando en crear una clase de “manada” que podría ser todos los animales de ese tipo vivos al mismo tiempo …

Hm, bueno, normalmente solo rellenas todas esas instancias en una lista y luego recorres esa lista si quieres hacer algo con ellas. Si desea realizar un seguimiento automático de cada instancia creada, también puede hacer que la adición a la lista sea implícita en el constructor de la clase o crear un método de fábrica que haga un seguimiento de las instancias creadas.

¿Me gusta esto?

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

En este punto, el rebaño tendrá 10,000 instancias distintas de la clase Animal .

Si necesita una forma de referirse a ellos individualmente, es relativamente común que la clase le dé a cada instancia un identificador único en la inicialización:

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

usted podría hacer una clase ‘animal’ con un atributo de nombre.

O

Podrías definir la clase programáticamente de la siguiente manera:

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

Encontré esto: http://www.gamedev.net/community/forums/topic.asp?topic_id=445037

Cualquier instancia podría tener un atributo de nombre. Entonces, parece que te estás preguntando cómo nombrar dinámicamente una clase , no una instancia . Si ese es el caso, puede establecer explícitamente el atributo __name__ de una clase, o mejor aún, simplemente cree la clase con el tipo incorporado (con 3 argumentos).

 class Ungulate(Mammal): hoofed = True 

sería equivalente a

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