面向对象编程
封装,继承,多态
class Student (object):
def __init__(self, name, score):
self.__name = name
self.__score = score
类名首字母大写,self相当于C++中的this指针,类中的函数,第一个参数必须是self,调用时不用传self
访问限制:变量或函数前加__,变量或函数变成private,外部不能直接访问,只能类内访问。变量被重命名成_Student__name
Student类继承object类,python允许多继承
多态:子类方法覆盖父类同名方法,默认是C++中的virtual。只要保证某类有同名方法,即可使用多态,非严格父-子类关系,称为鸭子类型,不要求严格继承
高级编程
类/实例可以动态绑定方法
1.使用__slots__ = ""限制实例绑定属性,只对本类实例起作用,对子类不起作用,不允许动态绑定,继承访问权限和C++相同
2.@property装饰器负责把方法变成属性,同时又创建另一个装饰器@xxx.setter
3.python允许多重继承,MinIn设计
4.定制类,实现__str__,__repr__,__call__
5.枚举类,Month=Enum("Month", ("Jan", "Feb"...))。枚举类不能实例化对象,可以从Enum类进行派生,@unique装饰器保证没有重复值
class Month(Enum):
Jan = 0
Feb = 1
6.使用元类,metaclass,相当于C++中的类模板,必须从type类派生。ORM的使用,对象关系映射,数据库的一行映射为一个对象,一个类对应一个表