关于特殊方法名

    Python有多层的实现,但我们只关心其中两层。

    从表面上看,我们有Python的源代码。源代码是传统面向对象与过程式函数调用的混合体。面向对象符号的后缀中通常包括object.method()object.attribute这样的结构。而前缀中包括了function(object)的调用,是典型的过程式设计。此外还包含了插入符,例如object+other。另外还有其他语句,例如for和调用对象方法的with语句。

    function(object)前缀的出现会导致一些程序员产生疑问,是否进行纯面向对象的Python编程。认为严格的遵守面向对象(object.method())的设计方式是有必要或有帮助的,这种说法是不够明确的。Python混合使用了前缀和后缀的编程方式,前缀符号代表了特殊方法的后缀符号。前缀、中缀和后缀符号的选择要基于表达力和优雅程度。良好Python代码的目标之一是,它看起来应该像英文。在底层,语法变化是由Python特殊方法实现的。

    在Python中的任何事物都是对象。这点与Java或C++不同,它们会有“原始”类型来避免对象范型。每个Python对象都提供了一个特殊方法的数组,其中包含了语言最上层功能的实现细节。例如,可以在应用程序中写str(x)。这个前缀符号在底层的实现为x.str()

    类似a+b这样的结构会被实现为a.add(b)b.radd(a),取决于对象a和b所属的类定义中所提供的类型兼容性规则。

    需要强调的是,在外部语法与特殊方法内部实现之间的映射不只是把function(x)重写为x.function()。在许多语言功能中,包含了一些特殊方法支持这项功能。一些特殊方法包含了从基类、object所继承的默认实现,另一些特殊方法则没有默认实现而会直接抛出异常。

    第1部分“用特殊方法实现Python风格的类”将会介绍这些特殊方法并会演示如何实现这些特殊方法,以使得我们的类定义能够与Python无缝结合。