类名首字母通常大写
创建实例 类名 +()
__init__方法 创建实例时把一些属性绑上去
__init__方法第一参数永远是self 表示船舰的实例本身
类是实例的模板 实例是一个一个具体的对象 各个实例拥有的数据都互相独立互不影响
私有变量 内部属性不能被外部访问 属性前有两个下划线__ 内部可以访问 外部不可以访问
__xxx__特殊变量是可以直接访问的 不是私有变量
继承
父类 超类 基类 子类
特点 子类获得了父类的全部功能 子类可以新增自己的方法 子类和父类有相同的方法时会覆盖父类的方法
在继承关系中 如果一个实例的数据类型是一个子类 那么它的数据类型也可以看作是父类 反过来不行
多态
定义class时就相当于定义了一种数据类型
调用方只管调用 对扩展开放 对修改封闭
python的鸭子类型 并不要求严格的继承体系(静态语言 如果要传入一个类型 则传入的对象必须是这个类型或其子类)一个对象只要看起来像鸭子 走起路来像鸭子 就把它当作鸭子(意思是只要传入的这个对象实现了真正对象的方法)
type()查看对象类型 import ypes 判断一个对象是否是函数 isinstance()判断对象类型 dir()获得一个对象的所有属性和方法 测试对象属性hasattr() setattr() getattr()
实例的属性比类属性高 del obj.attr 删除实例属性 编程时实例属性和类属性不要使用相同的名字
实例属性属于各个实例所有 互不干扰 类属性属于类所有 所有实例共享一个属性
a.b 说明对象a有b的属性