AYE89

coding & learning

导航

python的类

Posted on 2017-08-07 20:34  AYE89  阅读(181)  评论(0编辑  收藏  举报

一、语法

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: