如何找出我正在哪个类中初始化装饰器?这是有道理的,因为装饰器尚未绑定(bind)到类,所以我无法找到这一点,但是有没有办法解决这个问题?
class A(object):
def dec(f):
# I am in class 'A'
def func(cls):
f(cls)
return func
@dec
def test(self):
pass
我需要知道我属于哪一类(由注释行表示)。
最佳答案
我认为这是不可能的。在定义测试的那一刻,该类还不存在。
当Python遇到
class A(object):
它创建一个新的命名空间,在其中运行在类定义中找到的所有代码(包括 test() 的定义和对装饰器的调用),完成后,它创建一个新的类对象并放入代码执行后留在命名空间中的所有内容都放入此类中。
所以当装饰器被调用时,它还不知道任何事情。此时,test 只是一个函数。
关于python - python初始化时如何访问父类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956994/