2011-12-03 7 views
0

私のクラスの名前を表示する構文を見つけようとしています。次を考える:Pythonでクラスの名前を印刷するには

#!/usr/bin/python 

class a: 
    whatever = 0 

foo = a() 
bar = a() 
listOfClasses = [foo,bar] 

for l in listOfClasses: 
    print l 
    #I'm trying to find the syntax to print the name of the class (eg foo and bar) 
+0

これはクラスの名前ではなく、クラスのインスタンスを保持する変数の名前です。クラス名は "a"です。あなたが得られる最高のものは、 'locals()'辞書を見て、あなたが望むクラスのインスタンスである値を見つけることです。 – vanza

+0

両方の場合のクラス名は 'a'です。最初に割り当てられた変数の名前を見つけようとしています。単純にできません。 –

+0

@vanza:それは良い点ですが、Pythonの「変数」には* instances *は含まれていません。変数は* names *であり、他の場所に存在するオブジェクトにバインドされています。 –

答えて

2

あなたの例からは、インスタンス(foobar)の名​​前を探しています。一言で言えば、同じインスタンスを指す複数の名前付き変数が存在する可能性があるため、これを行う方法はありません。

クラス(すなわちa)の名​​前をお探しの場合は、l.__class__.__name__を使用できます。しかし、これはどちらかの完全防弾ではありません。

In [10]: class A(object): pass 
    ....: 

In [11]: A().__class__.__name__ 
Out[11]: 'A' 

In [12]: Z = A 

In [13]: Z().__class__.__name__ 
Out[13]: 'A' 
1

など(オブジェクトにのみ参照は名前を持つ)として、Pythonオブジェクトに名前を持っていないので、それは、この情報を取得することはできません。考えてみましょう:

この場合
foo = a() 
bar = foo # bar is now another name for foo 

lst = [foo, bar] # both elements refer to the *same* object 

、何lstの各要素のためのあなたの架空の「名前」機能、印刷のでしょうか?両方の要素が同じオブジェクトを参照することを示すために:

print [id(x) for x in lst] 

は二度同じidを印刷します。

1

あなたはこれを使用することができますので、instance.__class__.__name__

をお使いの場合には:a = foo.__class__.__name__

または

ab = bar.__class__.__name__bはString型です。

関連する問題