python面向对象简介_python------面向对象介绍

参考博客:http://www.cnblogs.com/alex3714/articles/5188179.html

一.面向对象介绍

class

object

封装

继承

多态

语法

属性

方法

构造函数

析构函数

私有方法,私有属性

类变量

实例变量

1.编程范式:

1)面向过程编程(Procedural Programming):

又被称为top-down languages,程序从上到下一步步执行,从头到尾。

缺点:一次性,维护难度大。

2)面向对象编程(Object-Oriented Programming OOP):

利用“类”和”对象“来创建各种模型来实现对真实世界的描述。

优点:使编程的维护和扩展变得简单,大大提高程序开发效率,

容易理解,团队开发变得容易。

2.面向对象编程:

1)class类:

对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象都具备的属性、共同的方法。

2) object对象:

一个对象即是一个类实例化后的实例。一个类必须经过实例化后才能在程序中调用;一个类可以实

例化多个对象,每个对象可以有不同的属性。

3)三大特性:

Encapsulation封装:在类中对数据的赋值、内部调用对外部用户是透明(用户不可见)的,

这使类变成了一个胶囊或者容器,里面包含着类的数据和方法。

Inheritance继承:一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。

Ploymorphism多态:

多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,

指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对

父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。

编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系

列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。

对不同类的对象发出相同的消息将会有不同的行为。

比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,

而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物,

只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。

多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,

调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,

而引用所指向的对象可以在运行期间动态绑定。

3.定义类:

classDog:def __init__(self,name):

self.name=namedefbulk(self):print("%s : wang wang wang" %self.name)

d1= Dog("hah")

d2= Dog("hehh")

d3= Dog("jajj")

d1.bulk()

d2.bulk()

d3.bulk()

4.构造函数

class Role(object):

n = 123 #类变量

name = '我是类name'

n_list = [] #增加一个列表

#定义一个类, class是定义类的语法,Role是类名,(object)是新式类的写法,必须这样写,以后再讲为什么

def __init__(self,name,role,weapon,life_value=100,money=15000):

#构造函数

#初始化函数,在生成一个角色时要初始化的一些属性就填写在这里

#__init__中的第一个参数self,和这里的self都 是什么意思?

self.name = name #等价于 r1.name = name #实例变量(静态属性),作用域就是实例本身。

self.role = role

self.weapon = weapon

self.life_value = life_value

self.__life_value = life_value #私有属性,前面加两个下划线

self.money = money

def shot(self): # 类的方法,功能(动态属性)

print("shooting!")

print(Role.n)

r1 = Role('xiaolaizi','police','98K') #把一个类变成一个具体对象的过程叫实例化

r1.name = "小赖子" #改名

r1.bullet_prove = True #添加类中没有的一个属性

r1.n_list.append("from r1") #往类变量列表中添加内容

print(r1.n,r1.name,r1.n_list)

r2 = Role('xiaomazi','police','mini14')

print(r2.n,r2.name,r2.n_list)

1445826-20180926204251852-727260295.png

5. 类变量与实例变量区别:

对象先调用实例变量,找不到再去类变量里面找。

实例变量可以修改,增加,删除 (del)。

实例变量:每个对象各自特有的属性;

类变量: 共有的属性。

6.类变量的作用及析构函数

类变量的用途:大家公用的属性,节省开销。

1445826-20180926201858031-1809586520.png

析构函数:在实例释放(就是自己写了 del 某某某之后)、销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,关闭打开的临时文件。

只有你自己del r1这个实例对象,python才会销毁r1对应的内存。(哪怕是你创建了r1这个内存之后再也不用了,python

也不会去给你删除,因为他不知道你用不用,只有当你摘去r1这个门牌号,python 才会拆了这座房子)

1445826-20180926203913596-701567392.png

7. 私有方法,已有属性

前面加两个下划线,只能在内部访问。

1445826-20180926210202594-496973198.png

8.类的继承

1 classPeople:2 """类的继承,父类"""

3 def __init__(self,name,age):4 self.Name = name #self.name = name

5 self.Age = age #Age是变量名,age是参数名。可以不一样,但是一般 都写一样的。

6

7 defeat(self):8 print("%s is eating ..." %self.Name)9

10 defsleep(self):11 print("%s is sleeping ..." %self.Name)12

13 deftalk(self):14 print("%s is talking ..." %self.Name)15

16 classMan(People):17 defpiao(self):18 print("%s is piaoing ..." %self.Name)19

20 #def sleep(self): #覆盖了父类方法

21 #print("man is sleeping ...")

22 #print("-"*20)

23

24 def sleep(self): #重构父类的方法

25 People.sleep(self) #既执行父类的方法,又执行子类的方法

26 print("+" * 20)27 print("man is sleeping ...")28

29 classWomen(People):30 defget_birth(self):31 print("%s is born a baby" %self.Name)32

33

34 m1 = Man("xiaolaizi",22)35 w1 = Women("xiaolizi",24)36 m1.eat()37 m1.piao()38 m1.sleep()39 w1.get_birth()

问题来了,那么怎么在父类的基础上只给Man类增加除了name ,age 之外的属性呢,而不影响Women子类?

1 classPeople:2 """类的继承,父类"""

3 def __init__(self,name,age):4 self.Name = name #self.name = name

5 self.Age = age #Age是变量名,age是参数名。可以不一样,但是一般 都写一样的。

6

7 defeat(self):8 print("%s is eating ..." %self.Name)9

10 defsleep(self):11 print("%s is sleeping ..." %self.Name)12

13 deftalk(self):14 print("%s is talking ..." %self.Name)15

16 classMan(People):17 def __init__(self,name,age,money): #对构造函数进行重构

18 People.__init__(self,name,age)

#等价于 super(Man,self).__init__(name,age) 优点是不用写父类名(哈哈哈)

19 self.money = money

20 print("%s 一生下来就有钱。。。。" % self.Name)21

22 defpiao(self):23 print("%s is piaoing ..." %self.Name)24

25 def sleep(self): #重构父类的方法

26 People.sleep(self) #既执行父类的方法,又执行子类的方法

27 print("man is sleeping ...")28

29 classWomen(People):30 defget_birth(self):31 print("%s is born a baby" %self.Name)32 m1 = Man("xiaolaizi",22,1000)33 w1 = Women("xiaolizi",24)34 m1.eat()35 m1.piao()36 m1.sleep()37 w1.get_birth()

1445826-20180927205728252-2098217318.png

多继承:

1class People(object): #新式类 父类1

2 """类的继承,父类"""

3 def __init__(self,name,age):4 self.Name = name #self.name = name

5 self.Age = age #Age是变量名,age是参数名。可以不一样,但是一般 都写一样的。

6

7 defeat(self):8 print("%s is eating ..." %self.Name)9

10 defsleep(self):11 print("%s is sleeping ..." %self.Name)12

13 deftalk(self):14 print("%s is talking ..." %self.Name)15

16 class Relation(object): #父类2

17 defmake_friend(self,obj):18 print("%s is making friends with %s" %(self.Name,obj.Name))19

20

21 class Man(People,Relation): #多继承 继承的顺序从左到右

22 def __init__(self,name,age,money): #对构造函数进行重构

23 #People.__init__(self,name,age)

24 super(Man,self).__init__(name,age) #新式类的写法

25

26 self.money =money27 print("%s 一生下来就有钱。。。。" %self.Name)28

29 defpiao(self):30 print("%s is piaoing ..." %self.Name)31

32 def sleep(self): #重构父类的方法

33 People.sleep(self) #既执行父类的方法,又执行子类的方法

34 print("man is sleeping ...")35

36 classWomen(People,Relation):37 defget_birth(self):38 print("%s is born a baby" %self.Name)39 m1 = Man("xiaolaizi",22,1000)40 w1 = Women("xiaolizi",24)41 m1.make_friend(w1)

执行结果:

xiaolaizi 一生下来就有钱。。。。

xiaolaizi is making friends with xiaolizi

那么问题来了,父类2 没有构造函数,怎么就传进去参数了呢?

那是因为我们已经在父类1继承了name,age 属性(哈哈哈)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值