【问题标题】:What is the difference between using decorators and extending a sub class by inheritance?使用装饰器和通过继承扩展子类有什么区别?
【发布时间】:2010-11-19 20:56:32
【问题描述】:

我试图将我的大脑包裹在 python 中的装饰器上,但不明白为什么我们不能通过使用子类来实现同样的事情?

【问题讨论】:

  • 你有例子吗?

标签: python decorator


【解决方案1】:

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

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

【讨论】:

  • 我当然希望 OP 知道 @spam\nclass Ham { ... } == class Ham { ... }; Ham = spam(Ham) 并询问为什么使用这种模式而不是使用子类。
【解决方案2】:
  1. 您知道在定义前加上@spam class|def name 只是意味着“定义此处所写的名称,然后将name 绑定到spam(name)”?

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

  3. 1234563在每种情况下都为自己创建新的子类。每个解决方案都不可避免地最终等同于或非常类似于装饰器。

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

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2012-01-09
    • 2011-03-23
    • 2021-07-19
    • 2023-03-21
    • 2016-09-16
    相关资源
    最近更新 更多