![]() |
1
32
|
![]() |
2
9
作为菲利普回答的附录;如果你不仅要装饰,还要保存 类型
可以 够了:
|
![]() |
3
2
|
![]() |
4
2
链接的维基百科文章中的UML图是错误的,你的代码也是错误的。 如果遵循“decorator模式”,则decorator类派生自修饰的基类(在UML图中,从WindowDecorator到Window的继承箭头丢失了)。 具有
您不需要实现未修饰的方法。
|
![]() |
5
0
补充@Alec Thomas回复。我修改了他的答案,使之符合装潢师的模式。这样你就不需要提前知道你要布置的班级。
然后,您可以将其用作:
|
![]() |
6
0
用例是:
有可能达到这样的行为:
这可能不是开箱即用的,因为除了getattr方法之外,我还从头顶键入了其他所有内容。 代码在修饰对象中查找请求的属性,如果它是一个方法(现在对属性不起作用,但是支持它们的更改应该不会太困难),那么代码将实际函数从方法中提取出来,并使用描述符接口调用将函数“重新绑定”为方法,但在修饰器上。然后它被返回并且很可能被执行。
其结果是如果
附言:是的,我知道它看起来很像继承,但这是在多个对象的组合意义上完成的。 |
![]() |
7
0
在Python3中,Philipp提出了一个公认的答案
我的工作方式:
|
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 2 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 2 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
![]() |
Tanvi Jaywant · 如何重载类 6 年前 |