一:面向对象
面向对象的编程,把一组数据结构和处理它们的方法组成对象,把相同行为的对象归为类,将类封装,隐藏其中细节,通过继承实现类的特化和泛化,通过多态实现基于对象类型的动态分派。
1.类和对象
- 两者的关系,就好比植物和兰花,动物和狗的关系一样,类是对象的模板,对象是类的实例。在面向对象的编程中,把一切东西看成对象,对象有自己的属性(数据结构)和行为(方法)。对象是独一无二的(就像世界上没有两片相同的叶子),但是对象一定属于一个类,把一堆具有共同特征的对象的特征(属性)和动态特征(行为)都提取出来,可以定义出一个叫做类的东西。
- 定义类:
用class关键字来定义类。类中可以定义方法 - 创建和使用对象
定义了类,开始创建一个对象 - 访问权限
对于其他的高级语言,C++等。在给对象(man)绑定的属性(name,age)要规定访问权限,可以设置成私有的(private),不要外界访问,那么我们在python用"__"两个下划线为开头来设置其私有属性的。
2:面向对象的支柱
三大支柱:封装、继承、多态。
- 封装:就是将所有的要执行的细节都隐藏,只留下接口调用。我们不用考虑实现的细节,只要知道方法的名称和参数就行。
- 继承:一个类将另一个类的属性和方法直接继承下来,使其也有该类的属性和方法。这个就相当于学生和人的关系。手机和电子产品的关系一样。将继承的那个类称为子类,被继承的类叫做父类。
- 多态:子类继承父类的方法后,在其基础上给出新的版本,这个叫做重写,在调用经过子类重写的方法时,不同的子类对象表现不同的行为。
装饰器 @property
在类中方法的访问权限问题上,不建议将属性设置为私有的,但直接public也不行,不够安全。那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便。
下例中对age设置了getter和setter两种,既可以修改也可以访问,对name只设置了getter,就只能访问,不能修改。
静态方法和类方法
- 在类中定义的方法中对象可以使用的方法是对象方法,也有的方法并不是对象方法,我们就需要用静态方法来解决。
定义静态方法:@staticmethod 在定义方法上一行加上。
@staticmethod
def YY():
函数体
- 类方法:类方法的第一个参数约定名为cls
定义:它表示的是当前类相关的信息的对象,通过这个参数可以获得 类相关的信息并可以创建出类的对象。
@classmethod
def YYY(cls):
函数体