面向对象入门(封装)

编程的方式:

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

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

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

面向对象编程(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()
时间: 2024-11-01 19:20:16

面向对象入门(封装)的相关文章

面向对象的封装性和多态性

面向对象之封装性: 1.继承要符合is-a的关系.即"子类is a 父类"——子类是父类.如:卡车是汽车,卡车is a 汽车. 2.父类中如果用Protected修饰符,表示只允许其子类访问,而不允许其他非子类访问: 父类中如果用private修饰符,子类是不能访问的. 3.除了构造方法不能被子类继承外,其他都可以直接被继承.可以用base关键字调用父类的构造函数:语法如下 :base(参数变量名) 使用base还可以调用父类的属性和方法. 注意:子类构造函数中已经定义了这些参数,在b

C#面向对象(封装)

以上就是面向对象的封装和初始化:

面向对象(封装private)

/** * Created by 刘朋程 on 2014-5-22. */ class Testprivate {     private int age = 18;              //私有化age并赋值为18 public void setAge(int age)   //设置age范围     {         if (age>0 && age<100)         {             this.age = age;             spe

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

黑马程序员——Java基础---面向对象之封装

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 面向对象之封装      一:封装概述 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: (1)将变化隔离(内部怎样变化外部是不需要知道的,只调用即可) (2)便于使用(我们不用知道内部构造直接使用就可以) (3)提高重用性

java基础面向对象之封装

java基础面向对象之封装 2017-01-15 封装 1)封装性就是保证类内部被外部类不可见 2)所有属性都必须使用private关键字声明 3)封转后的属性如果要被外部所访问就必须实现set和get方法 例如: 使用了private声明的属性只有在自己的类是可见的 1 class Book{ 2 private String title ; //使用private声明的属性 3 private int price ; 4 } 5 public class PrivateDemo1 { 6 p

原生JS面向对象思想封装轮播图组件

原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能实现都分别分为不同的模块.目前我封装的这个版本还不适配移动端,只适配PC端. 主要的功能有:自动轮播,点击某一张图片对应的小圆点就跳转到指定图片,有前后切换按钮.使用的时候只需要传入图片的路径以及每张图片分别所对应的跳转路径还有目标盒子ID就可以了,还可以自定义每张图轮播的延时,不过延时参数不是必须

Java学习记录(补充三:面向对象的封装和继承)

面向对象的封装package day7; //面向对象的封装 public class Employee { String name = "zhangsan"; private int age; //多个方法重载 public Employee(){ } public Employee(String name,int age){ } public Employee(int age,String name){ } //可以在方法里修改不能访问的属性 public int getAge()

OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当然,可以用代码生成器,不过配套的代码生成器暂时没有):又从网上找了一个封装了泛型方法的OracleHelper类,整合到一起,但貌似数据增删改查依然不方便:于是花了两天时间,在原有基础上对增删改查分页查询操作进行了面向对象的封装,并且对批量增删改操作进行事务封装,写事务代码更方便. 原理: 1.利用