Python 슈퍼 클래스에서 메서드를 실행할 때이를 호출 한 자식 클래스의 이름을 어떻게 알 수 있습니까?

케이스

이 부모 클래스가 있다고 가정 해 봅시다.

class BaseTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        # I want to assign the name of the class that called
        # the super class in a variable.
        cls.child_class_name = ??
        # Do some more stuff...

그리고 위의 BaseTestCase 클래스에서 상속 된이 클래스가 있습니다.

class MyTestCase(BaseTestCase):

    @classmethod
    def setUpClass(cls):
        # Call SetUpClass from parent (BaseTestCase)
        super(cls, cls).setUpClass()
        # Do more stuff...

많은 클래스가 동일한 부모 클래스에서 상속 할 수 있기 때문입니다. 주어진 시간에 부모 클래스를 호출 한 클래스의 이름을 어떻게 알 수 있습니까?

내 질문이 이해되기를 바랍니다. :에스

Martijn Pieters

cls.__name__cls클래스 메서드가 호출 된 실제 클래스 개체에 바인딩되어 있으므로 항상 현재 클래스의 이름입니다 .

즉, 메서드가 정의 된 클래스에 대한 참조 cls아닙니다 .

당신이해야합니다 없습니다 사용 super(cls, cls)! 에서 파생 클래스를 만들면 무한 재귀로 이어질 것 입니다 MyTestCase! 항상 실제 클래스를 사용하십시오.

class MyTestCase(BaseTestCase):
    @classmethod
    def setUpClass(cls):
        # Call SetUpClass from parent (BaseTestCase)
        super(MyTestCase, cls).setUpClass()
        # Do more stuff...

데모:

>>> class Foo(object):
...     @classmethod
...     def spam(cls):
...         print(cls.__name__)
... 
>>> class Bar(Foo):
...     @classmethod
...     def spam(cls):
...         super(Bar, cls).spam()
... 
>>> Bar.spam()
Bar
>>> Foo.spam()
Foo

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관