![]() |
1
7
我认为你不能用一个修饰器做你想做的事情(快速编辑:无论如何,用一个方法的修饰器)。当构造方法时调用decorator,即 之前 类被构造。代码不工作的原因是调用decorator时类不存在。 jldupont的评论是一种方法:如果您想设置 班 您应该修饰类或使用元类。 编辑:好的,看到你的评论后,我可以考虑一个由两部分组成的解决方案,可能对你有用。使用方法的修饰符设置 方法 ,然后使用元类搜索具有该属性的方法,并设置 班 :
就是这样。用途如下:
不过,说实话?使用
|
![]() |
2
2
在python2.6+中,您应该使用类修饰器,而不是使用元类。您可以将函数和类修饰符包装为类的方法,就像这个真实的例子。 我将这个例子与djcelery一起使用;这个问题的重要方面是“task”方法和行“args,kw=self.marked[klass]。 双关语 [附件]]暗中检查“klass”。 双关语 [attr]在self.marked“中。如果要使用@methodtasks.task而不是@methodtasks.task()作为修饰符,可以删除嵌套的def,并使用set而不是dict作为self.marked。使用self.marked,而不是像另一个答案那样在函数上设置marking属性,这使ClassMethods和StaticMethods能够工作,因为它们使用槽,因此不允许设置任意属性。这样做的缺点是函数decorator必须高于其他decorator,类decorator必须低于其他decorator,这样函数就不会被修改/重新=包装在一个和另一个之间。
|
![]() |
mueslo Thomas Kühn · 修饰类方法以构建方法注册表 7 年前 |
![]() |
Mr.Dreamer · 类方法的python装饰器 7 年前 |
![]() |
Igor Pozdeev · 属性getter和上下文管理器 7 年前 |
![]() |
Miles P · Typescript类型检查不适用于我的装饰程序 7 年前 |
|
Ryohei · 如何在我的软件包中使用decorator 7 年前 |
|
user7696297 · python中的函数修饰符是什么 7 年前 |
![]() |
lilezek · 限制方法修饰符的使用 7 年前 |