面向对象的三大特性是指:封装、继承和多态。 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 实例变量:定义在方法中的变量,只作用于当前实例的类。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,素以Dog也是一个Animal。 实例化:创建一个类的实例,类的具体对象。 方法:类中定义的函数。 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 python类的创建 一般类的创建用class来创立

class Student: school="sju" def **init**(self,name,gender,age): self.name=name self.gender = gender self.age = age def learn(self): print("is learning") 一、封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 从某处调用被封装的内容 class Student: school="sju" def **init**(self,name,gender,age): self.name=name self.gender = gender self.age = age def learn(self): print("is learning") stu1=Student('ZXR','male',18) self是一个形式参数,执行stu1时,self=stu1,内容被封装到stu1里 调用被封装的内容时,有两种情况: 通过对象直接调用 class Student: school="sju" def **init**(self,name,gender,age): self.name=name self.gender = gender self.age = age def learn(self): print("is learning") stu1=Student('ZXR','male',18) print(stu1.name) 通过self间接调用 ``class Foo:

def init(self, name, age): self.name = name self.age = age

def detail(self): print(self.name) print(self.age)

obj1 = Foo('chengd', 18) obj1.detail() # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 chengd ;self.age 是 18

obj2 = Foo('python', 99) obj2.detail() # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 python ; self.age 是 99x`

综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。 二、继承 继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。例如动物是一类,其中任一分支动物都具有动物的功能 所以,对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。 `class Student: school="sju" def init(self,name,gender,age): self.name=name self.gender = gender self.age = age def learn(self): print("is learning") class Ab(Student): pass stu1=Student('ZXR','male',18) print(stu1.dict)

stu2=Ab('ZXR','male',18) print(stu2.dict) G:.exe G:/python/test1.py {'name': 'ZXR', 'gender': 'male', 'age': 18} {'name': 'ZXR', 'gender': 'male', 'age': 18}`

三、多态 Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚“鸭子类型”。

def Func(F1 obj): """Func函数需要接收一个F1类型或者F1子类的类型"""

1
print obj.show()

s1_obj = S1() Func(s1_obj) # 在Func函数中传入S1类的对象 s1_obj,执行 S1 的show方法,结果:S1.show

s2_obj = S2() Func(s2_obj) # 在Func函数中传入Ss类的对象 ss_obj,执行 Ss 的show方法,结果:S2.show class F1: pass

class S1(F1):

1
2
def show(self):
print 'S1.show'

class S2(F1):

1
2
def show(self):
print 'S2.show'

def Func(obj): print obj.show()

s1_obj = S1() Func(s1_obj)

s2_obj = S2() Func(s2_obj)