当我在Python类中修饰bound方法时,我需要从外部类获取这个decorator中的一些信息。有可能吗?在
例如:
def modifier(func):
import sys
cls_namespace = sys._getframe(1).f_locals
cls_namespace['data'] # dictonary has no key 'data'
...
return func
class Parent:
data = "Hi!"
class Child(Parent):
@modifier
def method(self):
pass
cls_namespace
只是当前类的不完整名称空间,没有我需要获取的data
字段。在
有没有办法在装饰店买到?在
这是一个特别均衡的解决方案:
{{{然后用cd2}修饰。在
装饰器示例:
^{pr2}$使用示例:
函数修饰发生在类主体被执行时,此时对类本身或其基类一无所知。这意味着
modifier
修饰未绑定函数对象,只有在实例上实际调用了func
时,它才会被绑定。在您可以返回一个包装器函数来替换修饰函数,它将被绑定,并且您可以访问
self
:然后,每次对实例调用
method
时都将调用包装器。在如果必须在类创建时访问基类,则必须等到
class Child
语句已完成执行。在Python3.6之前,这只能从类修饰符或元类实现;每个类都是在类主体创建之后调用的,并且您至少可以访问基类。在使用类修饰符,例如:
^{pr2}$现在记下装饰工的位置。在
Python3.6添加了一个^{} method ,它也可以为您提供访问权限;每次创建当前类的子类时都会调用(class)方法:
并不是说传递给decorator包装器的第一个参数将是一个objects实例(
self
)。多亏了它,你可以获得你需要的一切。在见Raphaels回复: Related issue
自我是第一个论据
相关问题 更多 >
编程相关推荐