类
创建类
- 第一形式
|
|
- 第二种形式
|
|
实例
|
|
类属性
|
|
下面列出类的几种特殊属性的含义:
C.__name__:以字符串的形式,返回类的名字,注意这时候得到的仅仅是一个字符串,它不是一个类对象C.__doc__:显示类的文档C.__base__:类C的所有父类。如果是按照上面方式定义的类,应该显示object,因为以上所有类都继承了它。等到学习了“继承”,再来看这个属性,内容就丰富了C.__dict__:以字典形式显示类的所有属性C.__module__:类所在的模块
实例属性
|
|
类中变量引用可变数据
|
|
当类中变量引用的是可变对象是,类属性和实例属性都能直接修改这个对象,从而影响另一方的值。
访问限制
|
|
文档字符串
在函数、类或者文件开头的部分写文档字符串说明,一般采用三重引号。这样写的最大好处是能够用help()函数看。
|
|
继承
单继承
|
|
调用覆盖的方法
|
|
多继承
|
|
多重继承的顺序-广度优先
|
|
代码中的print C.__mro__是要打印出类的继承顺序。从上面清晰看出来了。如果要执行foo()方法,首先看J1,没有,看J2,还没有,看J1里面的K1,有了,即C==>J1==>J2==>K1;bar()也是按照这个顺序,在J2中就找到了一个。
这种对继承属性和方法搜索的顺序称之为“广度优先”。
Python 2的新式类,以及Python 3中都是按照此顺序原则搜寻属性和方法的。
方法
绑定方法
|
|
非绑定方法
在子类中,父类的方法就是非绑定方法,因为在子类中,没有建立父类的实例,却要是用父类的方法。
静态方法和类方法
|
|
在python中:
@staticmethod表示下面的方法是静态方法@classmethod表示下面的方法是类方法
多态和封装
多态
|
|
Python中的多态特点,Python不检查传入对象的类型,这种方式被称之为“隐式类型”(laten typing)或者“结构式类型”(structural typing),也被通俗的称为“鸭子类型”(duck typeing),Python是弱类型语言。
Java会检查传入对象的类型,所以是强类型语言。
封装和私有化
要了解封装,离不开“私有化”,就是将类或者函数中的某些属性限制在某个区域之内,外部无法调用。
Python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。例如:
|
|
如何将一个方法变成属性调用?
可以使用property函数。
|
|