python 进阶
一、静态方法和类方法
1、我们在类中定义的方法都是对象方法,也就是说这些方法都是发送给对象的消息。实际上,我们写在类中的方法并不需要都是对象方法,例如我们定义一个“三角形”类,通过传入三条边长来构造三角形,并提供计算周长和面积的方法,但是传入的三条边长未必能构造出三角形对象,因此我们可以先写一个方法来验证三条边长是否可以构成三角形,这个方法很显然就不是对象方法,因为在调用这个方法时三角形对象尚未创建出来(因为都不知道三条边能不能构成三角形),所以这个方法是属于三角形类而并不属于三角形对象的。我们可以使用静态方法来解决这类问题。
案例:输入四条边,判断它是否是一个正方形,如果是,计算面积。
2、和静态方法比较类似,Python还可以在类中定义类方法,类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象(类本身也是一个对象,有的地方也称之为类的元数据对象),通过这个参数我们可以获取和类相关的信息并且可以创建出类的对象。
二、继承
1、
案例:创建一个父类创建一个子类,父类计算两个数字的和记为SUM;子类自己还有一个参数,子类打印这个SUM
注意!私有变量不可继承
三、列表生成式
1、列表生成式
优点:计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况
缺点:占用内存
案例:打印1-100
打印1-100中的偶数部分
2、生成器
优点:节约内存空间
缺点:计算速度慢,因为要生成
四、装饰器
我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便。
注意!1)装饰器名,函数名需要一致
2)priperty需要先声明,再写setter,顺序不能倒过来。
3)如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
4)如果要修改访问器中的变量,可以搭建一个修改器或者删除访问器
例:
案例:
创建一个装饰器,3个函数(两个参数),装饰器处理这两个参数的和并打印
每一个函数打印这两个数字
案例:输入三个数字(私有),求三个数字的和;尝试更改其中两个数字