面向对象编程的四要素: 类、属性、函数(方法)、对象(实例)
类: 一群有着相同属性和函数(方法)的对象(实例)的集合,也可以具象化的理解为是一群有着相似特征的事物的集合;用class来声明。
抽象类:是一种特殊的类,只能作为父类存在,一旦对象化(或叫实例化)就会报错;一般使用class Classname(metaclass=ABCMeta)来声明。
类的继承:子类继承父类,子类可以使用父类的属性和函数,同时子类可以有自己独特的属性和函数;子类在生成对象的时候(实例化时),是不会自动调用父类的构造函数的,必须在子类的构造函数中显示的调用父类的构造函数;继承的优势是减少重复代码,降低系统熵值(即复杂度)。
属性:用"self.属性名"来表示,通过构造函数传入;表示对象(实例)的某个静态特征。
私有属性:以开头的属性,举例:self.属性名,只能在类内部调用,类外部无法访问。
公有属性:和函数并列声明的属性,可以理解为常量,一般用全大写表示;在类中通过"self.常量名"来调用,在类外使用"对象名.常量名"或者"类名.常量名"来调用。
函数:表示对象(实例)的某个动态能力。
构造函数:用def init(self, args...)声明,第一个参数self代表当前对象的引用,其他参数是在对象化时需要传入的属性值;构造函数在一个对象生成时(即实例化时)会被自动调用。
成员函数:是正常的类的函数,第一个参数必须是self;可通过此函数来实现查询或修改类的属性等功能。
静态函数:静态函数和类没有什么关联,第一个参数也没有什么特殊性;一般用来做一些简单独立的任务,既方便测试也能优化代码结构;一般使用装饰器@staticmethod来声明。
类函数:类函数的第一个参数一般为cls,表示必须传一个类进来;最常用的功能是实现不同的init构造函数;需要装饰器@classmethod来声明。
抽象函数:一般定义在抽象类中,主要目的是要求子类必须重载该函数才能正常使用;使用装饰器@abstractmethod来声明。
函数重载:父类的某函数通过raise Exception的方式要求子类必须重写该函数来覆盖父类原有函数。
对象:类对象化(实例化)后的某一个具体事物。
class A():
def init(self):
print('enter A')
print('leave A')
class B(A):
def init(self):
print('enter B')
super().init()
print('leave B')
class C(A):
def init(self):
print('enter C')
super().init()
print('leave C')
class D(B, C):
def init(self):
print('enter D')
super().init()
print('leave D')
D()
enter D
enter B
enter C
enter A
leave A
leave C
leave B
leave D
网友评论