从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...

由于许多类可以从同一个父类继承。我如何知道在给定时间内调用父类的类的名称?

我希望我的问题有道理。:S

马丁·彼得斯(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 条评论
登录 后参与评论

相关文章

Python-如何从子类实例调用超类的方法?

如何使子类自动调用超类方法

当子类对象存储在超类数组中时,如何调用子类方法?

从超类调用子类方法

我在子类中覆盖了一个属性的setter,但是当我在超类的init方法中调用它时,为什么子类的方法响应?

实例化子类时从超类调用方法

在调用方法时获取扩展超类的子类实例

Java继承:创建子类实例时如何调用超类方法?

如何从修饰的子类方法中调用重写的超类方法

如何从重写的子类方法调用超类的继承方法?

java泛型-如何在知道子类类型和超类的情况下调用子重载方法

您如何在Java中从超类调用子类方法?

如何使用子类的数据调用超类方法?

调用超类方法而不是子类方法

当另一个类仅知道超类时,如何获得对子类的访问?

NSNotificationCenter从超类或子类调用方法?

如何让子类扩展python中超类的方法

如何强制我的类的任何子类始终调用它们所覆盖的父类的实现方法?

如何在超类的静态函数中获取调用子类的名称?

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

如何使超类方法返回子类的实例

ClassCast异常:子类实现在调用超类方法时抛出异常

为什么从子类调用超类方法时我的值为空?

当两个具有相同名称的javascript类方法如何知道调用函数或方法时?

通过超类实例调用子类类的方法

Python:如何在调用父类时进行子类化?

从超类获取子类的名称?

当对象调用其超类的方法时如何处理?

如何确保某些方法从子类(Java)中的方法从抽象超类中调用