python(十)---面向对象编程

文章目录


1.面向对象编程与面向过程编程

强调的是步骤、过程、每一步都是自己亲自去实现的,这种解决问题的思路我们就叫做面向过程。
强调某方法就可以解决问题,这种解决问题的思路就是面向对象。

2.类与对象

类:具有相似内部状态和运动规律的实体的集合(或统称为抽象).。具有相同属性和行为事物的统称。
对象:具体事物的存在,在现实世界中可以是看得见摸得着的。可以直接使用的。

3.类和对象的关系

(1).类就是创建对象的模板。

(2).对象就是根据类产生的一个具体实例。

4.类和对象总结

类:

类是同一类对象的属性和行为的抽象和总结
类描述同一类对象应包含的数据
类描述同一类对象的行为特征
类是抽象的,是一个概念模型
一个类可以找到多个对象
类是对象的模板,对象是该类的实例

对象:

万物皆对象
面向对象方法的核心
具有明确的属性和行为
程序是对象的集合,通过消息交互

类和对象的关系:

类就是创建对象的模板
对象就是根据类产生的一个具体实例

5.类的定义

类(class)由3个部分构成:

类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法(行为)

定义一个类:

class 类名:
	方法列表

在这里插入图片描述
self代表类的实例,而非类:
(1).类的方法与普通的函数只有一个特别的区别----它们必须有一个额外的第一个参数的名称,按照惯例它的名称是 self
(2).所谓的self,可以理解为自己可以把self当作C++中类里面的this指针一样理解,就是对象自身的意思
(3).某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可

6.对象的定义

python中,可以根据已经定义的类去创建出一个或多个对象。
	对象名1 = 类名()
	对象名2 = 类名()
	对象名3 = 类名()

创建对象demo:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加获取对象属性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在方法内通过self获取对象属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.魔法方法

类的初始方法-----init()方法

类的初始方法-----init()方法
语法格式:

def __init__():
	pass

例子:在上面的Car类上,添加__init__() ,init()方法,创建对象时,默认被调用
在这里插入图片描述
创建对象时给属性赋值
在这里插入图片描述
在这里插入图片描述
init(self)默认有1个参数名字为self,如果在创建对象时传递了多个参数
语法格式:

def __init__(self,参数1,参数2,........,参数n):
	self.属性1 = 参数1
	........
	self.属性n = 参数n

在这里插入图片描述
在这里插入图片描述
创建对象时传多个参数
在这里插入图片描述

类的字符信息输出-----str()方法

当使用print输出对象的时候,只要自己定义__str__(self)方法,那么就会打印从在这个方法中return的数据,举例如下:

class Car:	
	 def __init__(self,newWheelNum,newColor):
	 	self.wheelNum = newWheelNum
	 	self.color = newColor
	 def __str__(self):
	 	msg = "嘿......我的颜色是" + self.color + ",我有%d"%self.wheelNum + "个轮胎..."
	 	return msg

在这里插入图片描述
在这里插入图片描述

类的析构方法------del()方法

创建对象后,python解释器默认调用__init__()方法:
当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法
语法格式:

def __del__(self):
	pass

实例:
在这里插入图片描述
在这里插入图片描述
注意:

(1)当有1个变量保存了对象的引用时,此对象的引用计数就会加1。
(2)当使用del删除变量指向的对象时,如果对象的引用技术不会加1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再次调用1次del,此时会真的把对象进行删除。

8.继承

单继承:

单继承示例:
在这里插入图片描述
在这里插入图片描述

多继承:

多继承示例:

(1)

在这里插入图片描述

(2)

在这里插入图片描述

(3)

在这里插入图片描述
子类的魔法属性__mro__ 决定了属性和方法的查找顺序
方法名字相同先从自己找,然后从第一继承找,然后依次,最后在object中查找。
在这里插入图片描述
不重名不受影响

子类重写父类同名属性方法:

在这里插入图片描述
在这里插入图片描述
如果子类和父类的方法和属性名相同,则默认使用子类的
子类重写父类的同名方法和属性
在这里插入图片描述
在这里插入图片描述
魔法方法__mro__查看继承的顺序 从第一个类依次查找
在这里插入图片描述

子类调用父类同名属性方法:

调用父类方法格式父类类名.父类方法(self)
示例:
在这里插入图片描述
在这里插入图片描述

多层继承:

示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.私有属性和私有方法

类的属性

命名格式:由字母开头,总体由字母、数字和_构成
使用方法:
在类外面:对象名.属性名
在类内部:self.属性名

类的方法:

使用def关键字可以为类定义一个方法,与一般函数定义不同,类的方法必须包含参数self,且为第一个参数
命名格式:由字母开头,总体由字母、数字和_构成。
使用方法:

在类外面:对象名.方法名(实参表)
在类里面:self.方法名(实参表)
公有属性和公有方法:
示例:
class Car:
	def setCarInfo(self,num,color):
		 self.wheelNum = num
		 self.color = color
	 def getCarInfo(self):
	 	print("车子的轮子数目是%d,车子的颜色是%s"%(self.wheelNum,self.color))
	 def toot(self):
	 	print("车子在鸣笛,嘟嘟.....")

私有属性和私有方法:

Python中以属性命名方式来区分,如果在属性名前面加了2个下划线 ’ _ ’ , 则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线 ’ _ ’ 的话表示该方法是私有的,否则为公有的)。

类的私有属性:
命名格式:__private_attrs 由__开头,总体由字母、数字和_构成
使用方法:只在类内部:self.__private_attrs
类的私有方法:

命名格式:命名格式:__private_function 由__开头,总体由字母、数字和_构成
使用方法:只在类内部:self.__private_function(实参表)
示例:

class People:
	def setName(self,name):
		self.__name = name # 访问私有属性__name
	def __getName(self):
		return self.__name
	def printName(self):
		print("姓名是%s'%self.__getName())   # 调用私有方法__getName()

在这里插入图片描述
在这里插入图片描述

10.多态

定义时的类型和运行时的类型不一样,此时就成为多态,多态的概念就是应用于java和c#一类强类型语言中,而python崇尚"鸭子类型"。
鸭子类型:
虽然我想要一只"鸭子",但是你给了我一只鸟。 但是只要这只鸟走路像鸭子,叫起来像鸭子,游泳也像鸭子,我就认为这是鸭子.
示例:在这里插入图片描述
在这里插入图片描述

11.属性和方法

类属性:

类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问。

定义:一个类的实例对象所拥有的属性。
特点:独立的,一对一
拥有者:每个对象都拥有自己的实例属性
语法格式:
class 类名:
	def 方法名(self):
		self.属性名    # 实例属性
	#  创建类的对象后
对象名.属性名 = 值  # 第一次执行,添加新属性

类方法:

类方法:是类对象所拥有的方法
特点: @classmethod 在上面修饰,方法第一个参数必须是类
语法格式:
@classmethod
def 类方法名(cls):
	执行代码
访问格式:

类名.类方法名()
实例对象名.类方法名()

应用: 访问类的属性,并且可以对类属性进行修改

静态方法:

静态方法:是类对象所拥有的方法
特点: @staticmethod来进行修饰,不需要多定义参数
语法格式:
@classmethod
def 静态方法名():
	执行代码
访问格式:

类名.静态方法名()

应用: 访问类属性,并且可以对类属性进行修改

在这里插入图片描述
在这里插入图片描述

12.异常

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

例:f = open("Good.txt")  # 打开一个不存在的文件
Traceback(most recent call last):
	File "error.py",line3 ,in <module>
		f = open("Good.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'Good.txt'

在这里插入图片描述
在这里插入图片描述

捕获多个异常——try…except…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

捕获异常信息描述并存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

捕获所有异常信息——try…expect …as…

在这里插入图片描述

示例1:

在这里插入图片描述
在这里插入图片描述

示例2:

在这里插入图片描述
在这里插入图片描述

异常的传递:

异常传递一般会出现在try嵌套使用时和多函数之间调用,这两种情况下:
如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。

抛出自定义异常—— raise语句

raise语句 : 可以引发一个异常。异常/错误对象必须有一个名字。自定义一个异常类,且它们应是Error或Exception类的子类。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常处理中抛出异常

在使用try…except…中,如果出现异常,可以选择捕捉该异常,自己处理;也可以选择抛出该异常,让系统处理(默认处理)。
语法格式:添加一个判断条件,若条件为真,表示捕捉异常自己处理;若为假,可以抛出异常,系统默认处理
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值