4

さまざまな動物を使って、Python で生命シミュレーションを作成しようとしています。使用するクラスの各インスタンスに名前を付けることは不可能です。その数を知る方法がないからです。

だから、私の質問:

オブジェクトに自動的に名前を付けるにはどうすればよいですか?

私は、そのタイプのすべての動物が同時に生きている「群れ」クラスを作成することを考えていました...

4

5 に答える 5

8

うーん、通常は、これらすべてのインスタンスをリストに詰め込み、それらを使って何かをしたい場合は、そのリストを反復処理します。作成された各インスタンスを自動的に追跡したい場合は、リストへの追加をクラスのコンストラクターで暗黙的に行うか、作成されたインスタンスを追跡するファクトリ メソッドを作成することもできます。

于 2009-01-01T18:52:03.210 に答える
5

このような?

class Animal( object ):
    pass # lots of details omitted


herd= [ Animal() for i in range(10000) ]

この時点で、herd にはAnimalクラスの 10,000 個の個別のインスタンスがあります。

于 2009-01-01T19:17:31.070 に答える
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
于 2009-01-01T22:26:20.580 に答える
2

name 属性を持つ「動物」クラスを作成できます。

または

次のようにプログラムでクラスを定義できます。


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

これを見つけました: http://www.gamedev.net/community/forums/topic.asp?topic_id=445037

于 2009-01-01T18:53:15.953 に答える
1

どのインスタンスにもname属性を設定できます。したがって、インスタンスではなく、クラスに動的に名前を付ける方法を尋ねているように思われます。その場合は、クラスの__name__属性を明示的に設定するか、組み込み(3つの引数)を使用してクラスを作成することをお勧めします。

class Ungulate(Mammal):
    hoofed = True

と同等になります

cls = type('Ungulate', (Mammal,), {'hoofed': True})
于 2009-01-02T00:44:58.710 に答える