从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条评论
登录后参与评论

相关文章

来自分类Dev

从Python超类运行方法时,如何知道调用它的子类的名称?

来自分类Dev

当子类调用超类的方法时,如何获得超类来引用子类中的属性?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从子类调用超类的方法

来自分类Dev

NSNotificationCenter从超类还是子类调用方法?

来自分类Dev

Java超类调用子类方法

来自分类Dev

从超类调用子类方法-设计模式

来自分类Dev

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

来自分类Dev

当子类重写方法时,我们如何确保在编译时调用超类的方法实现?

来自分类Dev

扩展超类,在Python中调用子类

来自分类Dev

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

来自分类Dev

在超类ArrayList中使用统一名称调用子类方法

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从超类获取子类的名称?

来自分类Dev

从超类获取子类的名称?

来自分类Dev

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

来自分类Dev

当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

Related 相关文章

  1. 1

    从Python超类运行方法时,如何知道调用它的子类的名称?

  2. 2

    当子类调用超类的方法时,如何获得超类来引用子类中的属性?

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

    从子类调用超类的方法

  14. 14

    NSNotificationCenter从超类还是子类调用方法?

  15. 15

    Java超类调用子类方法

  16. 16

    从超类调用子类方法-设计模式

  17. 17

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

  18. 18

    当子类重写方法时,我们如何确保在编译时调用超类的方法实现?

  19. 19

    扩展超类,在Python中调用子类

  20. 20

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

  21. 21

    在超类ArrayList中使用统一名称调用子类方法

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

    从超类获取子类的名称?

  27. 27

    从超类获取子类的名称?

  28. 28

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

  29. 29

    当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

热门标签

归档