python - 파이썬 - 인스턴스의 클래스 이름을 가져 오는 중입니까?
파이썬 클래스명 규칙 (6)
이 함수는 내가 인스턴스 클래스가 파생 된 기본 클래스 인 경우 Python에서 객체의 인스턴스를 만든 클래스의 이름을 어떻게 찾습니까?
아마 inspect 모듈 이 나를 도왔을지도 모른다고 생각 했었지만, 내가 원하는 것을 나에게주지 않는 것 같습니다. 그리고 __class__
회원을 파싱하는 것 __class__
이 정보를 얻는 방법을 모르겠습니다.
type ()?
>>> class A(object):
... def whoami(self):
... print type(self).__name__
...
>>>
>>> class B(A):
... pass
...
>>>
>>>
>>> o = B()
>>> o.whoami()
'B'
>>>
또는 classmethod
데코레이터를 사용할 수 있습니다.
class A:
@classmethod
def get_classname(cls):
return cls.__name__
def use_classname(self):
return self.get_classname()
사용법 :
>>> A.get_classname()
'A'
>>> a = A()
>>> a.get_classname()
'A'
>>> a.use_classname()
'A'
클래스 이름을 문자열로 사용 하시겠습니까?
instance.__class__.__name__
클래스의 __name__
속성을 사용해 보셨습니까? 즉 type(x).__name__
은 당신이 원하는 것이라고 생각하는 클래스의 이름을 줄 것입니다.
>>> import itertools
>>> x = itertools.count(0)
>>> type(x).__name__
'count'
이 메서드는 새로운 스타일의 클래스 에서만 작동합니다. 코드에서 구식 클래스를 사용할 수 있습니다. 다음 두 가지 모두에 적용됩니다.
x.__class__.__name__
class A:
pass
a = A()
str(a.__class__)
위의 샘플 코드 (대화식 인터프리터에서 입력 한 경우)는 __name__
속성이 호출 될 경우 생성되는 'A'
와 반대로 '__main__.A'
를 생성합니다. A.__class__
의 결과를 str
생성자에 전달하면 구문 분석이 처리됩니다. 그러나 좀 더 명확하게하려는 경우 다음 코드를 사용할 수도 있습니다.
"{0}.{1}".format(a.__class__.__module__,a.__class__.__name__)
이 동작은 별도의 모듈에 정의 된 동일한 이름의 클래스가있는 경우에 적합 할 수 있습니다.
위에서 제공된 샘플 코드는 Python 2.7.5에서 테스트되었습니다.
type(instance).__name__ != instance.__class__.__name #if class A is defined like
class A():
...
type(instance) == instance.__class__ #if class A is defined like
class A(object):
...
예:
>>> class aclass(object):
... pass
...
>>> a = aclass()
>>> type(a)
<class '__main__.aclass'>
>>> a.__class__
<class '__main__.aclass'>
>>>
>>> type(a).__name__
'aclass'
>>>
>>> a.__class__.__name__
'aclass'
>>>
>>> class bclass():
... pass
...
>>> b = bclass()
>>>
>>> type(b)
<type 'instance'>
>>> b.__class__
<class __main__.bclass at 0xb765047c>
>>> type(b).__name__
'instance'
>>>
>>> b.__class__.__name__
'bclass'
>>>