![]() |
1
58
如果您使用的是Python2.6或更高版本,则可以使用类装饰器,可能类似于这样(警告:未测试的代码)。
方法decorator通过添加一个“use_class”属性将该方法标记为感兴趣的方法-函数和方法也是对象,因此可以将其他元数据附加到它们。 创建类之后,类装饰器将遍历所有方法,并对已标记的方法执行所需的任何操作。 如果您希望所有的方法都受到影响,那么您可以省略方法decorator,而只使用类decorator。 |
![]() |
2
13
正如其他人指出的,在调用decorator时还没有创建类。
然而
,可以用decorator参数注释函数对象,然后在元类的
|
![]() |
3
4
正如ants所指出的,不能从类中获取对类的引用。但是,如果您有兴趣区分不同的类(不操作实际的类类型对象),则可以为每个类传递一个字符串。您还可以使用类样式的decorators将您喜欢的任何其他参数传递给decorator。
印刷品:
|
![]() |
4
3
问题是,当调用decorator时,类还不存在。试试这个:
此程序将输出:
如你所见,你必须想出一种不同的方法来做你想做的事。 |
![]() |
5
3
下面是一个简单的例子:
输出为:
|
![]() |
6
3
什么
flask-classy
创建一个存储在方法上的临时缓存,然后使用其他东西(flask将使用
您可以重用此模式,这次使用元类,以便在导入时包装方法。
在实际的类上(可以使用元类执行相同的操作):
来源: https://github.com/apiguy/flask-classy/blob/master/flask_classy.py |
![]() |
7
3
正如马克所说:
此代码显示了使用自动后处理时的工作原理:
产量:
注意,在本例中:
希望这有帮助 |
![]() |
8
1
这是一个老问题,但遇到了金星。 http://venusian.readthedocs.org/en/latest/
它似乎能够修饰方法,并在这样做的同时让您访问类和方法。
通知电话
不管怎样…下面的示例已完成并应运行。
|
![]() |
9
1
自python 3.6以来,您可以使用
注意,它在类创建时被调用:
如果你想知道更多关于类是如何创建的,特别是什么时候
|
![]() |
10
0
您将有权访问在装饰方法中调用该方法的对象的类,装饰器应返回该类。像这样:
使用modela类,可以执行以下操作:
|
![]() |
11
0
函数不知道在decorator代码运行时,它在定义点是否是一个方法。只有通过类/实例标识符访问它时,它才可能知道它的类/实例。要克服此限制,可以通过描述符对象进行修饰,以将实际的修饰代码延迟到访问/调用时间:
这允许您装饰单个(静态类)方法:
现在您可以使用decorator代码进行内省…
…对于改变函数行为:
|