2011-12-03 2 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 : 좋은 지적이지만, 파이썬의 "variables"는 * instances *를 가지고 있지 않습니다. 변수는 다른 곳에있는 객체에 바인딩 된 * 이름 *입니다. –

답변

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

그것은이 정보를 얻을 수는 없습니다 : 그러나이 완전히 방탄 중 하나가 아닙니다. 고려 : lst의 각 요소에 대해이 경우

foo = a() 
bar = foo # bar is now another name for foo 

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

, 어떤 것 가상의 "이름"기능 인쇄를?

print [id(x) for x in lst] 

은 두 번 같은 id을 인쇄합니다 : 두 요소가 같은 객체를 참조하는 것을 보여합니다.

1

이를 사용할 수 있도록 instance.__class__.__name__

를 귀하의 경우 : a = foo.__class__.__name__

또는

ab = bar.__class__.__name__b 유형의 문자열입니다.

관련 문제