source

Python 클래스의 부모를 구하는 방법은?

goodcode 2022. 9. 19. 23:36
반응형

Python 클래스의 부모를 구하는 방법은?

Python 클래스의 부모 클래스를 가져오려면 어떻게 해야 합니까?

다음 속성을 사용합니다.

cls.__bases__

문서에서:

클래스 개체의 기본 클래스 튜플입니다.

예:

>>> str.__bases__
(<type 'basestring'>,)

또 다른 예는 다음과 같습니다.

>>> class A(object):
...   pass
... 
>>> class B(object):
...   pass
... 
>>> class C(A, B):
...   pass
... 
>>> C.__bases__
(<class '__main__.A'>, <class '__main__.B'>)

직접뿐만 아니라 모든 조상을 원하는 경우 다음을 사용합니다.

import inspect
print inspect.getmro(cls)

유용하게 사용할 수 있는 것은 메서드를 해결할 때 상위 항목이 체크되는 순서(또는 다른 속성, 즉 메서드와 기타 속성이 Python의 동일한 네임스페이스에 존재하는 순서)의 모든 상위 클래스를 제공하는 것입니다.

모든 부모들을 데려오는 가장 빠른 방법은, 그리고 순서대로, 그냥,__mro__붙박이.

예를 들어.repr(YOUR_CLASS.__mro__).

다음 항목:

import getpass
getpass.GetPassWarning.__mro__

...순서는 다음과 같습니다.

(<class 'getpass.GetPassWarning'>, <type 'exceptions.UserWarning'>, <type 'exceptions.Warning'>, <type 'exceptions.Exception'>, <type 'exceptions.BaseException'>, <type 'object'>)

바로 그겁니다."최선" 답변이 더 많은 표를 얻을 수 있지만, 이것은 일부 난해한 답변보다 훨씬 더 간단하다.for루프, 조사__bases__클래스가 두 개 이상의 부모 클래스를 확장하는 것은 말할 것도 없습니다.Import 및 사용inspect불필요하게 스코프를 흐리게 할 뿐입니다.

새로운 스타일의 클래스에는mro메서드 해결 순서로 부모 클래스 목록을 반환하는 호출 가능한 메서드.

부모를 얻고 싶다면 베이스를 사용하세요__mro__(@syslog101에서 지적된 바와 같이) 메서드 해결 순서를 취득합니다(init가 실행된 순서를 알 수 있습니다).

기본(및 먼저 기존 객체의 클래스를 가져옵니다):

>>> some_object = "some_text"
>>> some_object.__class__.__bases__
(object,)

최신 Python 버전의 mro의 경우:

>>> some_object = "some_text"
>>> some_object.__class__.__mro__
(str, object)

분명히, 클래스 정의가 이미 되어 있는 경우는, 전화하면 됩니다.__mro__그 점에 대해 직접 확인:

>>> class A(): pass
>>> A.__mro__
(__main__.A, object)

모든 호출을 받으려면 모든 수준에서 를 사용하십시오.

이 함수는 객체의 모든 클래스를 인쇄하고 각 단계에서 다음 객체는 가장 왼쪽에 있는 상위 객체가 됩니다.

def print_root_left(class_):
    while True:
      print(class_)
      # Check there if are no bases then we have reached the root class
      if not class_.__bases__:
        break
      class_=class_.__bases__[0] # use the left most parent


example = "hello" 
print_root_left(example.__class__)

이미 한 번 대답했지만, "pip3 install pytis"를 사용하여 Python으로 작성된 "getip" 프로그램을 사용하거나 볼 수도 있습니다.

코드는, https://github.com/PyTis/PyTis/blob/development/src/pytis/getip.py 에서 확인할 수 있습니다.

링크된 저장소의 작성자입니다.

변수가 있고 해당 클래스클래스와 부모 클래스를 가져오려면 type() 메서드를 사용하여 변수에 대한 클래스를 제공합니다.

val="happy coding"
print(type(val).__mro__)

출력:

(<class 'str'>, <class 'object'>)

언급URL : https://stackoverflow.com/questions/2611892/how-to-get-the-parents-of-a-python-class

반응형