class A:
def x ( self ):
print( self.__class__ )
class B ( A ):
pass
b = B()
b.x()
在上述情况下,有没有办法让方法x
获取对类A
的引用而不是B
?当然,简单地编写 print( A )
是不允许的,因为我想使用需要类 A
的装饰器添加一些功能(并且因为我无法传递 A本身直接传递给装饰器,因为此时该类还不存在)。
最佳答案
除非您涉及 super
调用(或者更常见的是覆盖 x
的子类并直接调用 A.x(self)
作为他们的覆盖实现),在 type(self).mro()
中查找第一个具有 x
属性的项目可以工作 --
next(c for c in type(self).mro() if hasattr(c, 'x'))
如果您确实需要覆盖 super
调用,那就更难了——除非您碰巧知道 A
没有 super 类> 定义了一个 x
属性(当然,了解你的父类(super class)比了解你的子类更容易,尽管多重继承确实会使它变得复杂;-)在这种情况下,你只需要 last mro
的适当项目而不是第一个。
关于python - 在方法调用中获取当前类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848033/