未绑定方法
Python的类可以调用实例方法,但使用类调用实例方法时,Python不会自动为方法的第一个参数self绑定参数值。程序必须显示的为第一个参数传入方法的调用者。
类方法和静态方法
类方法:使用“@classmethod”修饰的方法。不管程序是通过类调用还是对象调用该方法,Python始终都会讲类方法的第一个参数(cls)绑定到类本身。(会自动绑定)
静态方法:使用“@staticmethod”修饰的方法。不管程序是通过类调用还是对象调用该方法。Python始终不会自动绑定。
对象调用 类调用
实例方法 Y N
类方法 Y Y
静态方法 N N
函数装饰器
当程序使用@函数(A函数)装饰另一个函数(B函数)时,实际上完成以下两步:
1)将被修饰的函数(B函数)作为参数传给@符号引用的函数(A函数)
2)将函数B替换(装饰)成第1)步的返回值。
使用函数装饰器,既可以在被修饰函数的前面添加一些额外的处理逻辑(比如权限检查),也可以在被修饰函数的后面添加一些额外的逻辑(如日志记录),还可以在目标方法抛出异常时进行一些修复操作。这种改变不需要修改被修饰函数的代码,只需要添加一个修饰即可。
成员变量
在类命名空间内定义的变量就是类变量,Python可以使用类来读取、修改类变量。此外,Python允许通过对象访问类变量,但如果程序通过对象尝试对类变量赋值,此时性质就变为新增实例变量。
使用property函数定义属性
property()语法:property(fget=None,gset=None,fdel=None,doc=None),可以根据需要值传入少量参数,那么定义的属性将为对应的只读,读写属性。
也可以使用@property装饰器还修饰方法,使之成为属性。例如使用@property修饰了A()方法,这样就是该方法变成了A属性的getter方法,此外还会多出一个@A.setter装饰器,用于修饰A属性的setter方法。
隐藏机制
只要将Python类的成员命名为双下划綫开头,Python就会将他们隐藏。但并非真正隐藏,会在这些方法名前添加单下划线和类名。__name----->_类名__name
__solts__
__solts__属性的值是一个元组,该元组的所有元素列出了该类的实例允许动态添加的所有属性名和方法名。
__solts__属性并不限制通过类来动态添加属性和方法
__solts__属性的限制只对当前的实例起作用,对该类派生出的子类不起作用
__bases__属性、__subclasses__()方法
__bases__属性:该属性返回所有直接父类组成的元组
__subclasses__()方法:该方法返回该类的所有子类组成的列表
枚举类
某些情况下,一个类的对象是有限且固定的(比如季节类,它只有4个类),这种类被称为枚举类。
程序有两种方法定义枚举类:
1)直接使用Enum列出多个枚举值来创建枚举类
2)通过集成Enum基类来派生枚举类