一、面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
面向对象的最主要目的是提高程序的重复使用性。
二、类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),类是具有相同属性和行为的一组对象的集合。在Python中,类通过 class 关键字定义,以 Person 为例,定义一个Person类
1 class Person(object): 2 pass
Python 中习惯将类名首字母大写,紧接着是(object),表示该类是从哪个类继承下来的。事物的属性在类中用变量表示,事物的行为和动作在类中用方法即函数表示。
1 class Person(object): 2 def __init__(self,name,gender,birth): 3 self.name = name 4 self.gender = gender 5 self.birth = birth 6 def tell(self): 7 print('this is the informtion of %s '%self.name)
创建Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都加上统一的属性。__init__()方法的第一个参数必须是self,后面的参数可以自己定义。类中函数的第一个参数必须是self,self指向所创建的实例。self.<变量名> 称为实例变量,可在类的任何方法中直接应用。
对象是实际的实体,每一个对象都是类的一个具体实例。创建类的实例格式:
<变量> = <类名>([参数],....)创建实例时,必须提供除self以外的参数。
1 p1 = Person('alex','M',20), 2 p2 = Person('Rose','F',18)
除了接收__init__方法中指定的属性,还可以给实例增加其他属性
1 p1 = Person('alex','M',20) 2 p1.job = 'teacher' 3 print('the job of p1 is %s '%p1.job)
运行结果:
the job of p1 is teacher
对象方法调用:<对象名>.<方法名>.(<实参>)
1 p1 = Person('alex','M',20) 2 p2 = Person('Rose','F',18) 3 p1.tell() 4 p2.tell()
运行结果:
this is the informtion of alex this is the informtion of Rose
三、面向对象特性
面向对象的三大特性:封装、继承、多态
1. 封装
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问,仅可以内部访问。
1 p1 = Person('alex','M',20) 2 p1.tell() 3 print('修改前:',p1.get_age()) 4 p1.set_age(17) 5 print('修改后:',p1.get_age())
运行结果:
this is the informtion of alex 修改前: 20 修改后: 17
这样外部要访问私有属性age必须通过get_age和set_age方法,这样就确保了外部代码不能随意修改对象内部的状态。