![]() |
1
2
你可以用
|
![]() |
2
1
这不起作用的原因是因为你指的是
将串行对象存储为类属性
如果你储存
在每个实例上进行装饰
或者如果你需要一个不同的
这个解决方案推广到修饰多个方法或有条件地停用序列化,比如在测试环境中。
|
![]() |
3
0
有很多隐藏的陷阱,使这成为一个危险的设计,但它是一个很好的学习例子。 首先,装饰时调用“self”失败,因为在该范围内没有self。它只存在于方法内部。现在,简单的一个已经不存在了。。。 myfunc是App类的一个属性。当你创建一个App实例时,总是调用一个函数。即使它变得有条不紊,也只会发生一次。
这就是为什么需要self为实例获取唯一的名称空间。这也是为什么您无法通过这种方式获得实例特有的decorator。 另一种考虑方法是,必须先定义类,然后才能生成实例。因此,在定义类时不能使用实例。 解决方案decorator需要以一种不会存储任何实例属性的方式编写。它将访问应用程序实例属性。
现在我假设MySerial在每个应用实例中都会有一个唯一的文件、端口或其他东西。这是串行配置中记录的内容。如果流开始关闭,这可能并不优雅,但您应该能够为您的确切应用程序改进这一点。 |
![]() |
sokeefe · 初始化类中的Decorator变量 7 年前 |
![]() |
oulenz · 如何使新的装饰器在类中可用,而不显式导入它们? 7 年前 |
![]() |
spencer · 为什么有必要将self作为方法装饰器的参数? 7 年前 |
![]() |
Jorge Arévalo · 如何检查函数是否用特定的装饰器装饰? 7 年前 |
![]() |
jrk0414 · 在python中使用修饰符设置全局变量 8 年前 |
![]() |
Brendan Abel · 在函数属性中访问self 8 年前 |