1. __init__ 方法是可选的,但一旦你定义了, 就必须记得显示调用父类__init__ 方法(如果它定义了的话)。这样更是正确的:无论何时子类想扩展父的行为,后代方法 必须在适当时机,使用适当的参数,显式调用父类方法。
2. 下划线
- _single_leading_underscore: weak "internal use" indicator. E.g. "from M import *" does not import objects whose name starts with an underscore.
- single_trailing_underscore_: used by convention to avoid conflicts with Python keyword, e.g. Tkinter.Toplevel(master, class_='ClassName')
- __double_leading_underscore: when naming a class attribute, invokes name mangling (inside class FooBar, __boo becomes _FooBar__boo; see below).
- __double_leading_and_trailing_underscore__: "magic" objects or attributes that live in user-controlled namespaces. E.g. __init__, __import__ or __file__. Never invent such names; only use them as documented.
3. Python 没有任何形式的函数重载。一个 __init__ 方法就方法就是一个 __init__ 方法,不管它有什么样的参数。每个 类只能一方法,不管它有什么样的参数。每个类只能拥有一个__init__ 方法方法,并且如果一个子类拥有__init__ 方法,它总是覆盖父类的__init__ 方法,甚至子类可以用不同的参数列表来定义它。
4. 专用方法产生的原因:它们提供了一种,可以将非调语法映射到方法调用上。
5. 在 Java 中,通过使用 中,通过使用 中,通过使用 str1 == str2 可以确定两个字符串变量是否指向同一块物理内存位置。这叫做对象同一性,在 Python 中写为 str1 is str2。在 Java 中要中要比较两个字符串值,你要使用str1.equals(str2);在 Python 中,你要使用str1 == str2。
6. 在 Java 中,静态变量 (在 Python 中叫类属性) 和实例变量 (在 Python 中叫数据属性) 两者都是紧跟在类定义之后的 (一个有 static 关键字,一个没有 )。在 Python 中,只有类属性可以定义在这里,数据属性定义在 __init__ 方法中。
7. 与大多数的语言不同,一个 Python 函数,方法或属性是私有还公完全取决于它的名字.如果一个 Python 函数,类方法或属性的名字以两个下划线开始(但不是结 束),它是私有的;其它所都公有的。
8. 如果你要在正则表达式和编写循环间抉择,选择正则表达式。正则表达式因其是以 C 语言编译的可以本能地在你计算机上运行,你的循环却以 Python 编写需要通过Python 解释器运行。
如果你需要在正则表达式和字符串方法间抉择,选择字符串方法。它们都是以C 编译的,所以选取简单的。
字典查找的通常应用很快,但是 string.maketrans 之类的特殊函数和isalpha() 之类的字符串方法更快。如果 Python 有定制方法给你用,就使它吧!