Python中不常见OOP的原因?

dea*_*mon 8 python oop

除了使用常见的OOP,像Java和C#与他们的基类的Objectobject,Python使用的对象的基本行为的特殊方法.Python使用__str__在传递对象时使用的print:

>>> class Demo:
>>>   def __str__(self):
>>>     return "representation"

>>> d = Demo()
>>> print(d)
representation
Run Code Online (Sandbox Code Playgroud)

同样的len:

>>> class Ruler:
>>>   def __len__(self):
>>>     return 42

>>> r = Ruler()
>>> len(r)
42
Run Code Online (Sandbox Code Playgroud)

我期望的是这样的:

>>> class Ruler:
>>>   def len(self):
>>>     return 42

>>> r = Ruler()
>>> r.len()
42
Run Code Online (Sandbox Code Playgroud)

间接使用特殊方法而不是直接调用常用方法的原因是什么?

Fog*_*ird 13

这里的原因在Python文档中有很好的解释:

http://docs.python.org/faq/design.html#why-does-python-use-methods-for-some-functionality-eg-list-index-but-functions-for-other-eg-len-名单

主要原因是历史.函数用于那些对一组类型通用的操作,这些操作甚至可以用于根本没有方法的对象(例如元组).当您使用Python的功能特性(map(),apply()等)时,拥有一个可以很容易地应用于无定形对象集合的函数也很方便.

事实上,实现len(),max(),min()作为内置函数实际上比将它们作为每种类型的方法实现它们的代码更少.人们可以对个别案例嗤之以鼻,但它是Python的一部分,现在进行这样的根本性改变为时已晚.必须保留这些功能以避免大量代码破坏.

(这在评论中得到了回答,但为了未来的读者,需要作为一个真正的答案来展示.)

  • 你打败了我;-) (2认同)