面向对象入门(封装)

Posted alben-xue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象入门(封装)相关的知识,希望对你有一定的参考价值。

编程的方式:

·面向过程:根据业务逻辑从上到下垒代码

·函数式:将某功能代码封装到函数中,通过调用函数来简洁代码

·面向对象:对函数进行分类和封装,让开发变得“更好、更快、更强”

 

 

面向对象编程(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()

 

以上是关于面向对象入门(封装)的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python3快速入门Python3面向对象

python之路之前没搞明白4面向对象(封装)

Python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承

JavaSE入门学习13:Java面向对象之封装