假设我有这个父类:
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...
由于许多类可以从同一个父类继承。我如何知道在给定时间内调用父类的类的名称?
我希望我的问题有道理。:S
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] 删除。
我来说两句