我的编程空间,编程开发者的网络收藏夹
学习永远不晚

面向对象

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

面向对象

面向对象

特性 class  object

封装、继承、多态

语法:属性、方法

构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数

析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关闭打开的临时文件  当程序执行完以后, 析构__del__(self)自动进行内存销毁,或者在程序执行中,如果要销毁一个实例时,手动通过 del r1就会删掉变量名,然后析构函数就会自动销毁内存 )

私有方法(函数)、 私有属性(变量)  私有:表示只能自己访问,别人不能访问

私有属性:就是通过self.__life_value =life_value 添加两个下划线 就会将该变量隐藏,外面访问不了,只有在类中才可以改变    给类中函数添加两个__就会变成私有方法

类变量(大家共用属性,节省开销 不需要复制多个)、实例变量(表示具体对象的每个属性)

1 class person():
2     cn ="中国" 
3     """与下面的cn ="china"功能相同,但是 类变量cn ="中国"
4     只需要在类中复制一份就可以,但是cn="china"有几个人需要
5     实例化就需要复制几分到每个人所定义的内存中去,就要消耗很多内存"""
6     def __init__(self,name,sex,age,job,cn ="china"):
7         self.name =''
8         pass
View Code

面向对象编程

OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

面向对象的几个核心特性如下

Class 类
一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法

Object 对象 
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同

Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是不可见的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法

Inheritance 继承

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

Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现的多种形态。
编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。
对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。

多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定

无论用什么形式来编程,我们都要明确记住以下原则:

1、写重复代码是非常不好的低级行为

2、你写的代码需要经常变更 

类的基本知识(私有方法、构造函数、析构函数)

 1 class Role(object):
 2     n =123 #这个变量称为类变量 存在于类的内存里  不实例化类也能使用 通过 role.n
 3     n_list=[]
 4     """如果在Role中有一个列表,通过r1.n_list.append("from r1")
 5      和r1.n_list.append("from r1") 再打印r1.n_list,或者r2.n_list,
 6      或者Role.n_list 最后的结果都是 ['from r1', 'from r2']
 7      因为都是通过append()追加,它们的变量名相同,也就是内存地址也是同一个,
 8     故而结果相同
 9     """
10     name ="类中name"
11     def __init__(self, name, role, weapon, life_value=100, money=15000):
12         """   self 就是为了存储下面的r1变量,下面的变量就为局部变量
13         名字叫:构造函数  内存中的东西在不用的情况下,会清除,所以通过赋给一个变量,那么就一直不会清除,在实例化时做一些类的初始化的工作 该函数是用于传参数
14  """
15         self.name = name #该值是赋给了实例   故而:该变量称之为实例变量(静态属性)  作用域就是实力本身
16         self.role = role
17         self.weapon = weapon
18         self.__life_value = life_value # 加个__就会变成私有属性
19         self.money = money
20 
21     def shot(self):#其他函数调用类role的时候,仍然用到的是r1这个变量
22         print("shooting...")
23 
24     def __del__(self): #析构函数  当程序执行完后执行该函数,
25         # 或者中途通过del r1就会直接删除r1变量名,然后析构函数就会直接销毁内存
26         print("%s:彻底死掉……" %self.name)
27     # def got_shot(self):
28     #     print("ah...,I got shot...")
29     def got_shot(self):#谁调用got_shot 谁就是参数self
30         print("%s:ah...,I got shot..." % self.name )# r1.name 等价于self.name
31     def buy_gun(self, gun_name):#这三个函数都称之为类的方法(动态属性)
32         print("just bought %s" % gun_name)
33 
34 r1 = Role('Alex', 'police', 'AK47') #把一个类变成一个具体对象的过程的实例化(初始化一个类,造了一个对象)
35 r1.name ="zhangsan"#可以再次赋值修改变量
36 r1.bullet_protect=True#添加新的属性  但是r2没有这个属性,因为只给r1添加了
37 r1.n ='改变变量' #并不是将类变量改变,而是在实例中直接生成了一个n这个变量的值,根据变量查找范围,先查找实例化的变量所以n会发生变化
38 r1.n_list.append("from r1")
39 #print(r1.weapon)
40 #del r1.weapon #删掉了r1的这个属性 对r2没有什么影响
41 r2 = Role('Jack', 'terrorist', 'B22')  #生成一个角色   实例化成一个对象也叫role类的实例
42 r1.got_shot() # 有class内部转成了role.got_gun(r2) 故而 等价于:role.got_shot()
43 r2.n_list.append("from r2")
44 print(r1.n,r1.name,r1.bullet_protect)#在实例化后,找一个变量之后,会从实例变量开始查找,然后再从类变量中找
45 
46 print(r2.name,r2.weapon,r2.n)
47 Role.n ="abc"
48 print(r1.n,r2.n_list)#  运行结果:改变变量 abc 只对r2有影响,对r1没有影响 因为r1自己有值
49 print(Role.n_list)
View Code

类的继承

 1 #class People:# 经典类
 2 class People(object):#新式类的写法
 3     def __init__(self,name,age):
 4         self.name =name
 5         self.age =age
 6         self.friends =[]
 7     def eat(self):
 8         print("%s is eating ……"%self.name)
 9     def sleep(self):
10         print("%s is sleeping……"%self.name)
11     def talk(self):
12         print("%s is talking……"%self.name)
13 class Relation():
14     def make_friends(self,obj):#obj就是对象,就是将其与前面的谁调用make_friends有关联
15         print("%s make friends with %s"%(self.name,obj.name))
16         self.friends.append(obj) #即使改名字,这里也会跟着变化,这里是添加了关系
17 class Man(People,Relation): #两个字类之间不能相互继承 即Man不能和Woman相互继承 因为两者本来就不是同一所以才产生两个类
18     def __init__(self,name,age,money): #首先要将父类中的参数写入其中,并且将要添加的参数也写入其中
19        # People.__init__(self,name,age) # 将People中的构造函数应用到Man中  还是执行父类中的方法
20         super(Man,self).__init__(name,age)#等价于People.__init__(self,name,age) 万一以后将继承父类改了名字,只需要改上那个父类名就可以
21         self.money =money #对man中添加的值进行初始化    Woman中没有该参数
22         print("%s have %s yuan money" %(self.name,self.money))
23    
24  def smoke(self):
25         print("%s is smoking……"%self.name)
26     def sleep(self): #在子类中修改父类中的方法
27         #People.sleep(self) #经典类的写法
28         super(Man, self).sleep()#等价于上面   新式类的写法
29         print("Man is sleep……")
30     def play_bastball(self):
31         print("%s is playing bastball……"%self.name)
32 
33 class Woman(Relation,People):#多继承,是从左向右逐步进行,如果第一个已经将参数接收过来,第二个类直接使用即可,如果第一个没有将参数接收,第二个接受了参数,那么在没有接受第二个类之前就运行了第一个类,那也就 将报错
34     def birth(self):
35         print("%s is born the baby……"%self.name)
36     def wash(self):
37         print("%s is washing……"%self.name)
38 
39 m1 =Man("zhangsan",26,100)
40 # m1.sleep()
41 # m1.talk()
42 #m1 =Man("zhangsan",26)
43 # m1.money= "10元"
44 # print(m1.money,m1.sleep,m1.talk)
45 w1 =Woman("hehua",28)
46 # w1.wash()
47 # w1 .birth()
48 m1.make_friends(w1)
49 w1.name ="wangwu"
50 print(m1.friends[0].name) #通过实验可知:obj将两者联系起来了
51 print(m1.friends[0]) #如果前面的self.friends.append(obj.name)那么
52 # m1和w1就会失去联系,此时只是对应一个字符串
View Code

经典类和新式类继承顺序问题

新式类 class A(object):  经典类  class A:

在如下中的继承中,对于继承中构造函数的执行__init__(self):

在python2.x中经典类是按深度优先来进行的,新式类是按广度优先来继承的

在python3.x中经典类和新式类都是统一按照广度优先来继承的

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

面向对象

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

面向对象

面向对象特性 class  object封装、继承、多态语法:属性、方法构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数)析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关闭打开的临时
2023-01-30

python 面向对象、类、对象

class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法inheritance 继承 python中通过类和对象来实现 面向对象的编程面向
2023-01-31

Python面向对象之面向对象基本概念

面向过程和面向对象概念过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。面向过程和面向对象 基本概念面向过程-怎么做把完成某一个需求的所有步骤从头到尾逐步实现;根据开发需求,将某些功能独立的代码封装成一个
2023-01-31

python - 面向对象

#python面向对象 - 类定义  注意:特殊方法"__init__"前后分别有两个下划线!!!   __init__方法可以理解成定义属性的方法,编辑器中会默认将属性都绑定到self中,在使用时直接self.shuxing 即可哟;  
2023-01-31

Python25 面向对象

该文章部分转载,部分原创引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角
2023-01-31

Python3 面向对象

Python3 面向对象python是一门面向对象语言,在python中有一句话:一切都是对象面向对象简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变
2023-01-31

python面向对象

python面向对象目录:1.类的定义和使用2.类的封装3.类的继承4.多态 1.类的定义和使用查、增加、修改、删除、初始化方法、实例化__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用
2023-01-30

python3_07.面向对象

面向对象程序设计的基本步骤:    1、根据功能、抽象业务对象。    2、构建独立的业务模块,利用封装、继承、多态等抽象业务需求。    3、编写程序。    4、以对象为单位输入参数、开展测试。global关键字用来在函数或其他局部作用
2023-01-31

python 面向对象

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序
2023-01-30

Python|面向对象

#一、类、对象定义及使用#定义类语法:class 类名(父类):代码块注意:()可有可无#class Student:#class Student():#创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对象是,采用n
2023-01-30

面向对象进阶

isinstance和issubclassisinstance(obj,cls)检查是否obj是否是类 cls 的对象class Foo(object): pass obj = Foo() isinstance(obj, Foo
2023-01-31

[Python3]Python面向对象

一、面向对象的程序设计的由来1.第一阶段:面向机器,1940年以前最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据。简单来说,就是直接编写 0 和 1 的序列来代表程序语言。例如:使用 0000
2023-01-31

python面向对象,类

1:类和对象    是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球体出来。2:类的定义    类把需要的变量和函数组合成一起,这种
2023-01-31

python面向对象(一)

面向对象1.初始面向对象     面向过程:         一切以事务的发展流程为中心.     面向对象:         一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象     打比方:  面向过程         大象
2023-01-30

javascript面向对象3

函数创建函数:function f(x){…..};var f = function(x){…};上面两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数。       函数定义时可以设置参数。如果传给函数的参数个数不够,则从
2023-01-31

JavaScala之面向对象

Scala是一门面向对象的语言。在Scala中,一切皆为对象函数是对象,数字也是对象,本文详细介绍了Scala面向对象的原理和介绍,感兴趣的小伙伴可以参考一下
2023-05-15

面向对象初识

一、面向对象(OOP)基本概念    面向对象编程 —— Object Oriented Programming 简写 OOP1.1 过程和函数过程 是早期的一个编程概念过程 类似于函数,只能执行,但是没有返回值函数 不仅能执行,还可以返回
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录