さまざまな動物を使って、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
name 属性を持つ「動物」クラスを作成できます。
または
次のようにプログラムでクラスを定義できます。
from new import classobj
my_class=classobj('Foo',(object,),{})
これを見つけました: http://www.gamedev.net/community/forums/topic.asp?topic_id=445037
どのインスタンスにもname属性を設定できます。したがって、インスタンスではなく、クラスに動的に名前を付ける方法を尋ねているように思われます。その場合は、クラスの__name__属性を明示的に設定するか、組み込み型(3つの引数)を使用してクラスを作成することをお勧めします。
class Ungulate(Mammal):
hoofed = True
と同等になります
cls = type('Ungulate', (Mammal,), {'hoofed': True})