实例方法 静态方法 类方法

首先新建一个日期Date类,属性为年,月,日,tomorrow()是实例方法,这个最常见,比较简单,实例方法的第一个参数是实例对象self
实例方法 静态方法 类方法_第1张图片

当我们传入的年月日是2018-6-4这样的形式,我们就需要先进行字符串处理,在这里使用了元组的拆包
实例方法 静态方法 类方法_第2张图片
这是最基本的方式,但是这样写会有一个问题,每次传参都需要进行字符串预处理,所以我们可以将其写成静态方法

实例方法 静态方法 类方法_第3张图片
实例方法 静态方法 类方法_第4张图片
在这里,使用静态方法有一个缺点就是:在return Date(int(year), int(month), int(day))这行代码中我们采用了硬编码方式,当我们修改了类的名字,这里的类名Date就得修改,那我们使用类方法重写下
实例方法 静态方法 类方法_第5张图片
实例方法 静态方法 类方法_第6张图片
我们使用类方法后,Date就变成了cls,当我们修改类名的时候,不必再修改类方法

从书写形式,能不能在其方法中访问实例属性和类属性,能不能被类和实例访问三个角度总结下(耐心看,文字有点多,但不难理解)
总结:
1、实例方法:第一个参数是实例对象self
                       通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高

2、静态方法:修饰器@staticmethod来标识其为静态方法
                      静态方法不需要多定义参数,这也就存在上述的硬编码的缺点
                      静态方法中引用类属性的话,必须通过类对象来引用,不能访问实例属性
                       能够通过实例对象和类对象去访问类方法

3、类方法:   修饰器@classmethod来标识其为类方法
                       第一个参数必须是类对象,一般以cls作为第一个参数
                       通过cls引用的必定是类对象的属性和方法,不能访问实例属性
                       能够通过实例对象和类对象去访问类方法

你可能感兴趣的:(python)