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'
>>>




python-datamodel