使用装饰器和通过继承扩展子类有什么区别?

时间:2010-11-19 20:56:33

标签: python decorator

我试图将我的大脑包裹在python中的装饰器周围但却无法理解为什么我们不能通过使用子类来实现同样的东西?

2 个答案:

答案 0 :(得分:3)

您可以使用子类实现相同的功能,事实上您甚至不需要子类 - 您也可以通过将方法包装在另一个方法中并重新分配它来实现相同的功能。关于是否应该将装饰器语法添加到语言中有很多讨论,因为它不允许你做任何新的事情并且需要程序员学习更多新东西。

语法的作用是形式化许多人已经使用的模式,并使其成为具有如何使用的名称和指南的标准语法。您没有必要使用装饰器 - 您可以通过其他方式实现相同的效果 - 但使用官方支持的标准方法以及简洁易读的语法可以使生活更轻松。

答案 1 :(得分:1)

  1. 您确实知道使用@spam class|def name添加定义只是意味着“将名称定义为此处,然后将name绑定到spam(name)”?

  2. 装饰器经常应用于函数而不是类。当然,你可以创建一个可调用的类和子类......你也可以实现自己的整数类型。两者都不可行。

  3. 在很多情况下,你可以通过子类化来做非常相似的事情......除了装饰器定义一次并且可以应用于几个类,而不是写一个在每种情况下都是新的子类。对此的每个解决方案都不可避免地会与装饰者等同或非常相似。

  4. 罗伯特在评论中指出,如果你有一个例子,答案可能更具体......