【问题标题】:What is adding methods to a class instead of "properly" subclassing called?什么是向类添加方法而不是调用“正确”的子类化?
【发布时间】:2013-08-11 02:26:10
【问题描述】:

中举个简单的例子:

>>> class A(object):
...     pass
...
>>> def f(self):
...     print "f called"
...
>>> A.f = f
>>> a = A()
>>> a.f()
f called

所以在这个例子中,已经存在的类A 获得了一个额外的(实例)函数f(尽管覆盖现有的也可以)。在现实生活中,这当然会发生,例如在不同的模块中。但是这个过程是怎么调用的呢?

【问题讨论】:

标签: python class oop terminology


【解决方案1】:

不确定我是否在关注你,但如果我关注了,你在谈论extension methods

【讨论】:

  • 基本上是的,尽管这听起来非常特定于 C#。问题linked to by Daniel Williams使用了monkeypatching这个标签,好像描述的好一点
  • 扩展方法是一个术语,不是C#特有的,它在C#中实现得非常好,而c#恰好是一个很常见的PL,所以扩展方法的例子通常取自C#。 (如果他们没有改变计划,它应该也被引入java8)
  • @TobiasKienzler moneypatching 似乎更适用于动态语言,例如 python,所以如果您仅指动态语言,而不是一般概念,我认为您可能是对的,它是一个更好的术语。
  • 啊,有道理。所以我会接受你的回答,但在使用 Python 时将此称为猴子补丁:-7
  • 好的,as Jeff states,monkeypatching 基本上是对修改已经存在的方法更进一步的扩展方法
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多