编程的方式:
·面向过程:根据业务逻辑从上到下垒代码
·函数式:将某功能代码封装到函数中,通过调用函数来简洁代码
·面向对象:对函数进行分类和封装,让开发变得“更好、更快、更强”
面向对象编程(object oriented programming)OOP
这种编程方式的落地需要使用"类"和"对象"来实现,所以面向对象编程其实就是对"类"和"对象"的使用。
类(class)
"类"就是一个模板,模板里可以包含多个函数,"类"中的函数叫做"方法"
对象(object)
"对象"是根据模板创建的实例,通过实例对象可以执行类中的"方法"
面向对象的三大特征:
1、封装
2、继承
3、多态
一、封装
将内容封装到某个地方,以后再去调用被封装在某处的内容
所以,在使用面向对象的封装特性时,需要注意两点
·将内容封装到某处
·从某处调用被封装的内容
第一步,将内容封装到某处
1 class Foo: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 # 根据类Foo创建对象 12 13 14 15 obj1 = Foo("Alben",18) 16 17 18 19 obj2 = Foo("Nichole",30)
self 是一个形参,
·当执行obj1 = Foo("Alben" , 18)时,self = obj1
·当执行obj2 = Foo("Nichole" , 30)时,self = obj2
所以,内容被封装到了对象obj1和obj2中,每个对象中都有name和age属性,在内存中的对应关系:
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
·通过对象直接调用
·通过self间接调用
通过对象直接调用:
print(obj1.name)
print(obj2.name)
通过self间接调用:
通常,调用"类"中封装的"方法"的时候,通常使用self间接调用——
1 class Foo: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 def detail(self): 12 13 print(self.name) 14 15 print(self.age) 16 17 18 19 obj1 = Foo("Alben",18) 20 21 22 23 obj1.detail() 24 25
#在执行的时候,Python会将obj传递给参数self,即obj1.detail(obj1)。
综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或self间接的方式获取封装的内容。
练习:
在终端输出一下内容
王顺,10岁看黄片
王顺,10岁撸管
王顺,10岁逛窑子
熊鸡鸡,10岁看黄片
熊鸡鸡,10岁撸管
熊鸡鸡,10岁逛窑子
函数式:
1 def kanhuangpian(name,age): 2 3 print(name +‘, ‘ + age + "岁看黄片") 4 5 6 7 def luguan(name,age): 8 9 print(name + ‘, ‘ + age + "岁撸管") 10 11 12 13 def guangyaozi(name,age): 14 15 print(name + ‘, ‘ + age + "岁逛窑子") 16 17 18 19 20 21 name1 = "王顺" 22 23 name2 = "熊GG" 24 25 age1 = str(10) 26 27 28 29 kanhuangpian(name1,age1) 30 31 luguan(name1,age1) 32 33 guangyaozi(name1,age1) 34 35 36 37 kanhuangpian(name2,age1) 38 39 luguan(name2,age1) 40 41 guangyaozi(name2,age1)
OOP式:
1 class People: 2 3 def __init__(self,name,age): 4 5 self.name = name 6 7 self.age = age 8 9 10 11 def huangpian(self): 12 13 print("%s , %d岁看黄片!" % (self.name,self.age)) 14 15 16 17 def luguan(self): 18 19 print("%s , %d岁撸管!" % (self.name,self.age)) 20 21 22 23 def yaozi(self): 24 25 print("%s , %d岁逛窑子!" % (self.name,self.age)) 26 27 28 29 obj1 = People("王顺",10) 30 31 obj2 = People("熊GG",10) 32 33 34 35 obj1.huangpian() 36 37 obj1.luguan() 38 39 obj1.yaozi() 40 41 42 43 obj2.huangpian() 44 45 obj2.luguan() 46 47 obj2.yaozi()