이 부모 클래스가 있다고 가정 해 봅시다.
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...
많은 클래스가 동일한 부모 클래스에서 상속 할 수 있기 때문입니다. 주어진 시간에 부모 클래스를 호출 한 클래스의 이름을 어떻게 알 수 있습니까?
내 질문이 이해되기를 바랍니다. :에스
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] 삭제
몇 마디 만하겠습니다