定义
金典
class 类名:
类的实现
这种方式在python2中没有父类
在python3中默认继承object
新式
class 类名(object):
类的实现
这种方式在python2中和python3中都继承object
创建对象
变量 = 类名(参数…)
属性
对象的属性
self.属性
对象.属性
对象.__dict__:打印该对象内部全部对象属性的字典形式
类的属性
类对象可以访问类属性。类名.类属性
实例对象可以访问类属性,对象名.类属性
实例对象修改类属性,实际上是创建了一个新的实例属性,所以实例对象不能直接修改类属性
方法
魔法方法
在特定时候,自动执行
* __init(self)__
* 创建对象之后立即执行
* 一般用于初始化对象属性
* 该函数主要用于初始化的,默认返回None,也可以手动返回,但是手动返回也只能返回None,返回其它会报错
* __new(cls)__
* 创建对象使用,用于创建对象
* 控制是否创建对象
* __str(self)__
* 打印对象的时候自动调用
* 封装类的描述信息,必须有返回值,而且返回值必须是字符串
* __del(self)__
* 发现对象销毁的时候,自动执行
* 作用:
* 验证对象是否销毁
* 用于释放对象占用的资源
类方法
@classmethod
def 方法名(cls):
cls代表的是类对象
cls.类属性 # 可以直接访问类属性并修改
实例方法
def 方法名(self):
self代表的是实例对象
类方法的中的cls,实例方法中的self,可以任意改成其他名称,不过官方推荐和使用习惯上是cls和self。
他们必须出现在形参列表的第一个
静态方法
@staticmethod
def 方法名():
方法体
静态方法是使用类管理的产物,将一些和类对象与实例对象无关的方法封装起来,相当于java中静态类的方法作用
类对象和实例对象访问这几种方法的时候注意:
- 类和对象都可以直接访问调用静态方法
- 类可以直接调用类方法和静态方法
- 类调用对象方法,必须指明特定对象,格式:类名.方法名(实例对象)
特性
封装
就是把客观事物封装成抽象的类
继承
指可以让某个类型的对象获得另一个类型的对象的属性的方法
python2/3区别
python2
+ 写明继承对象(object),是新式类
+ 没有写明继承对象,无继承
python3
+ 写明继承对象或者不写明都是继承自object
重写
子类中定义和父类中方法名相同的方法,产生覆盖效果
* 手动调用父类方法*
+ 父类.父类方法(子类对象)
+ super().父类方法()
+ super(子类名,子类对象).方法名()
私有属性
私有属性在子类不能使用,也即是子类不会继承父类的私有属性
格式:在属性名前面加“__”(两个下划线)
多继承
MRO算法:python里专门用于处理获取父类方法顺序的算法
子类名.mro:获取继承顺序
父类.父类方法(子类对象):指定父类执行方法
子类手动调用父类方法
- 方式1:父类名.父类方法名(self)
- 方式2:super().父类方法():这里如果是多继承的子类,按照MRO算法顺序查找,python2不支持
- 方式3:super(子类名,self).方法名():python3支持。python2的新式类支持(推荐)
多态
是指一个类实例的相同方法在不同情形有不同表现形式
传入不同的子类对象,调用相同的父类方法,产生不同的结果
增加代码的灵活度
是以继承和重写为前提的
逻辑工具
is a
代表继承关系,is前面是子类
has a
代表属性关系,a后面的是属性