一、语法
python类的机制是 C++ 的类机制和 Modula-3 的类机制的混合体:
允许多继承的类继承机制,派生类可以重写它父类的任何方法,一个方法可以调用父类中重名的方法;
1.动态特性: 类可以被动态创建, 并且可以在创建之后被修改;
2.类的成员 (包括数据成员) 通常都是 public的 (例外见下私有变量 (page 95)), 并且所有的成员函数都是 virtual 的;
3.Python 中没有关联对象成员和方法的隐式表达: 所有方法函数在声明时显式地将第一个参数表示为对象, 这个参数的值在方法被调用时隐式赋值;
4.Python 类本身就是对象. 这就提供了导入和重命名的语义;
5.与 C++ 和 Modula-3 不同的是, Python 的内置类型可以被当做基类来让使用者扩展;
6.另外, 像 C++ 一样, 大多数有特殊语法的内置操作符 (算数运算符, 下标操作符等等) 在类的实例中都可以重定义;
二、对象的别名
由于在实现的时候传递的是指针, 所以传递一个对象的开销很小;
三、命名空间
1.可以利用keyword: del 语句来删除可写属性.
例如, del modname.the_answer 将从名为 modname 的模块中移除属性 the_answer.
2. import 语句, 和函数定义都将模块或函数绑定到了当前作用域.
四、类对象&实例对象
那么, MyClass.i 和 MyClass.f 就是合法的属性引用, 分别返回一个整数和一个函数对象.
类属性也可以被指定, 所以你可以给 MyClass.i 赋值以改变其数值.
实例化:(实例对象)
x = MyClass();
1.构造方法:
def __init__(self):
2.方法对象&函数对象:
x.f 是一个 method object,
MyClass.f 是 一个function object.
x.f() 是严格等价于MyClass.f(x)
五、继承
1.派生类定义
BaseClassName 的定义对于派生类是可见的
class DerivedClassName(BaseClassName):
基类定义在另一个模块
class DerivedClassName(modname.BaseClassName):
2.多重继承
python支持多重继承
class DerivedClassName(Base1, Base2, Base3):
六、私有变量
以一个下划线带头的名字 (如 _spam) 应该作为非公共的 API (不管是函数, 方法或者数据成员).
七、空的类定义
一段 Python 代码中如果希望一个抽象的数据类型, 那么可以通过传递
一个类给那个方法, 就好像有了那个数据类型一样.
八、迭代器
定义一个 __iter__() 方法用以返回一个具有 __next__() 的对象. 如
果这个类定义了 __next__() , 那么 __iter__() 仅需要返回 self: