一、面向过程和面向对象
面向过程和面向对象是两种编程风格
面向过程,即怎么去实现,主要考虑功能实现的步骤和过程,多使用函数组合相互调用实现
面向对象,即谁去实现,怎么配合,主要考虑动作的主体之间的相互关系,面向对象将不同的操作按主体进行划分,然后指挥不同的对象组合完成不同的操作
二、面向对象基本概念
1、类:用来描述具有相同属性和方法的对象的集合,类定义了该集合中每个对象所共有的属性和方法,对象是类的实例
2、数据变量:类变量或实例变量,用来处理类及实例对象相关的数据
类变量:类变量在所有实例对象中是公用的,类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用
实例变量:在类的声明中,属性是用变量来表示的,这种变量称为实例变量,实例变量定义在类中且在其他成员方法之外
局部变量:定义在方法中的变量,只作用于当前的实例
3、方法:类中定义的函数
4、继承:一个派生类继承基类的字段和方法,继承也允许把一个派生类作为一个基类对象看待
5、重写:如果从父类继承的方法不能子类的需求,可以对其进行改写,这种过程叫方法的覆盖,也叫方法的重写(override)
6、实例化:创建一个类的实例,即类的具体对象
7、对象:通过类定义的数据结构实例,对象包括两个数据成员(类变量和实例变量)和方法
三、类的使用
1、创建类
使用class语句创建类
class ClassName: '类的帮助信息' #类文档,可以通过ClassName.__doc__查看 class_suite #类的实体
实例
# -*- coding: UTF-8 -*- class Employee: '所有员工的基类' empCount = 0 #类变量,在类的所有实例对象*享,可以在内部类或外部类中使用Employee.empCount来访问 def __init__(self, name, salary): #__init__类的构造函数或实例化方法,创建类的实例会调用该方法 self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): #类方法,与普通函数不一样,必须有额外的第一个参数名称self,self代表类的实例,而非类 print("Total Employee %d" % Employee.empCount) def displayEmployee(self): print("Name : ", self.name, ", Salary: ", self.salary) "创建 Employee 类的第一个对象" emp1 = Employee("Zara", 2000) "创建 Employee 类的第二个对象" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print("Total Employee %d" % Employee.empCount) print(Employee.__doc__)
2、创建实例对象
Python中没有关键字new,类的实例化类似于函数调用,使用类的名称来实例化,通过__init__接收参数
3、访问属性
使用点号.来访问对象的属性
4、销毁对象
析构函数__del__在对象销毁时候使用,当对象不再被使用时,__del__方法运行
四、Python内置类属性
__dict__:类的属性(包含一个字典,由类的数据属性构成)
__doc__:类的文档字符串
__name__:类名
__module__:类定义所在的模块
__bases__:类的所有父类构成的元素(包含了一个由所有父类构成的元组)
五、Python对象销毁机制
Python使用了引用计数来跟踪和回收垃圾
在Python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变量,称为引用计数器
当一个对象被创建时,就创建了一个引用计数器,当对象不再需要时,这个对象的引用计数变为0,解释器会在适当的时机,将垃圾对象占用的内存空间进行回收
六、类的继承
通过继承创建的类称为派生类或子类,被继承的类称为基类或父类
继承类
class 派生类名(基类名): ...
多重继承
class 派生类名(基类名1,基类名2,基类名3,...): ...
Python中继承的特点
1、如果子类需要父类的构造方法,就要显式的调用父类的构造方法,或者不重写父类的构造方法
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量
3、Python查找对应类型的方法时,先在本类中查找调用的方法,查不到时,再去基类中逐个查找
七、类属性与方法
1、类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问,在类内部的方法使用self.__private_attrs访问
2、类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部被调用,在类内部使用self.__private_method访问
3、类方法
在类的内部,使用def关键字为类定义一个方法,类方法必须包含参数self,且为第一个参数
4、单下划线开头
以单下划线开头表示是protected类型的变量,即保护类型变量只允许本身和子类访问,不能用于from module import
5、双下划线开头
以双下划线开头表示是private类型的变量,即私有类型变量只允许这个类本身进行访问
6、双下划线开头和结尾
一般是系统定义的名字,例如__init__