2017-03-25 8 views
1

クラスpersonのオブジェクトをループして属性を抽出することは可能ですか?クラスのインスタンス化されたオブジェクトを反復する

です。コードの下からの出力は、このような オブジェクトマイク、名前、マイク、年齢20

class Person(object): 
    def__init__(self,name,age): 
    self.name = name 
    self.age = age 


mike = Person('Mike',20) 
john = Person('John',20) 
jack = Person('Jack',20) 
adam = Person('Adam',20) 

として、各オブジェクトのためになるループの後に感謝

答えて

2

Pythonのクラスは、自動的にそれらのすべてのインスタンスを追跡しません。

class Person(object): 
    people = [] 

    def __init__(self, name, age): 
     self.name = name 
     self.age = age 
     self.people.append(self) 

さらにクラス属性を使用すると、それを追跡する別のオブジェクトを持つことができます。ここのPerson.people属性は、そのプロセスの単一のグローバル値であり、クラスのユーザビリティとテスト容易性を制限する可能性があります。

+0

(HTTPSであるジャック午前20 次のとおりです。 //docs.python.org/3/library/weakref.html)、クラスによって追跡されているインスタンス*のみ*をリリースすることができます。 – jonrsharpe

+0

こんにちは感謝しかし、各オブジェクトの場所ではなく、オブジェクトとその属性の名前を印刷する、私はこれが場所を持つことによって抽出することができますかわからないのですか? – Jaff

+0

個々の属性を出力するか、クラスに '__repr__'メソッドを定義して印刷してから、ドキュメントをチェックする必要があります:https://docs.python.org/3/reference/datamodel.html#object.__repr__ – jsbueno

1

ループに指定されたインスタンスの属性が、私はあなたが組み込み関数varsを探していると思う:あなたはいくつかのコードを追加しない限り、特定のクラスのすべてのインスタンスをループし

>>> mike = Person('Mike', 20) 
>>> vars(mike) 
{'age': 20, 'name': 'Mike'} 

は、可能ではありませんあなた自身のインスタンスのリストを維持する。

+0

ありがとうこの機能を私に知らせるためには、特定の状況では非常に便利ですが、この問題のために私の目的には役立ちません。あなたの応答に感謝します。 – Jaff

1

私の理解が正しいならば、あなたはクラスの人をループすることについて質問しています それはこのようにすることができます。

class person(object): 
    def __init__(self,name,age): 
     self.name=name 
     self.age=age 
for name,age in {'mike':20,'john':20,'jack':20}.iteritems(): 
    p = person(name,age) 
    print ('I am %s my age is %d' %(p.name,p.age)) 
私の年齢は、私が20 である私はマイクだ

に答える##ジョン私の年齢は、私は私の年齢は、潜在的に[弱参照]可能性が20

+0

しかし、このソリューションでは、手動でインスタンス化したすべてのオブジェクトの属性をリストして、クラスをループしないようにする必要があります。 – Jaff

関連する問題