2021-12-6 (python面向对象总结)

放弃考研,准备春招!

近期学了python面向对象,开始总结

一、概念

面向对象其实在生活中很常见,我们人的一切行为活动其实都是一个面向对象的过程。
跟以往不同,面向对象过程总是先定义出类,在类中写好属性和方法,然后调用这个类来实现此功能。就好比在生活中,我们总是先制造好各种类型的物品,定义好他的固有属性和功能,当我们需要的时候,再从这些制造好的物品中选择适合的一样。这个是一个抽象的概念,而这个对象则是实实在在存在的具体的某一事物。

二、集成开发环境(IDE )pycharm

从今天开始,我们使用集成开发环境pycharm编辑运行面向对象的代码。具体安装步骤和配置命令网上资料很多,就不多赘述了。

三、类、属性、方法、对象的定义

在python中,我们使用class关键字来定义类。在类中,我们需要创建其属性和方法。然后我们还需要创建对象。
定义类语句如下:

class 类型名称(父类名称,父类名称……):

在Java中,创建对象的语句为:

类名称 对象名称 = new 类名称()

与Java等强数据类型语言不同,python创建对象的语句很简单。
创建对象语句如下:

对象名称 =  类名称()

然后我们如果需要调用类的属性,则可以通过以下语句实现:

对象名称.属性 

在创建好的类中,我们可以设置其属性和方法,也可以进行初始化。例如:

"""创建一个名为User的类"""
class User(object):
	def __init__(self):			#初始化
		self.name = "zzy"		#定义初始化属性
		self.age = 21
	
	def msg(self):				#定义方法
		print("我的名字是{},我的年龄是{}".format(self.name, self.age))

u1 = User()						#创建对象
print(u1.name)					#调用属性并打印
print(u1.age)					#调用属性并打印
u1.msg()						#调用msg方法

结果如下:
在这里插入图片描述

四、面向对象的三大特征

面向对象有三大特征,分别是:封装、继承、多态

1、封装

封装在我们现实生活中就是奖一个东西与其他东西隔绝开来,外面不能直接看到被封装在里面的东西。
在python的面向对象过程中,也可以对其进行封装。这里的封装操作指的是将属性私有化,并提供公开的方法来访问和设置的做法。
概念有点抽象,其实就是将定义的类里面的属性私有化,让他只能在这个类里面访问和修改,如果不给他设置公开的方法,类外是无法直接访问和修改这个属性的。只有在类里设置了公开的访问和修改办法,类外才可以恢复正常访问和设置操作。
具体操作为,在定义属性是,属性名称前面加上__即可
例如:

class User(object):
	def __init__(self):			#初始化
		self.__name = "zzy"		#定义初始化属性
		self.age = 21

这里的self.__name 就是私有属性,self.age是公有属性。如果这时我们要在外面访问name这个属性,则会报错,错误原因为找不到name这条属性,即成功被封装。
在这里插入图片描述
所以要想成功的访问私有属性,我们需要设置公开的方法
这里有两个方法,分别是gatter和setter,对应实现访问(gatter)和设置(setter)两个功能。封装有三种写法
第一种:

def get_name(self):			#定义访问方法使外面可以正常访问到私有属性name
	return self.__name

def set__name(self, name)	#定义设置方法使外面可以正常对私有属性name进行设置
	self.__name = name

我们在外面访问和设置是,应通过调用这两个方法实现:
如:

print(u1.get_name())		#访问私有属性
name = u1.set_name("hst")	#设置私有属性
print(name)

第二种:
利用property全局函数进行二次封装
代码为第一种写法的后面再加一句 name = property(get_name, set_name)
好处是可以达到隐藏数据的目的。说白了就是你以为你访问到了其实只是我给你提供的“伪接口”(name)

第三种:
利用装饰器

@property
def name(self):
    return self.__name

@name.setter
def name(self, name):
    self.__name = name

三种写法结果均相同
在这里插入图片描述

2、继承

继承就是继承定义类时类名称后面括号里的内容,即他的父类。继承只能继承他的公共属性,而不能继承其私有属性。
python是多继承实现机制。
如果多个父类中存在重名的方法时,自类对象调用时的顺序不一样。
python2中分为新式类和旧式类(经典类)。新式类是遵从广度优先继承,即谁是最后一个继承谁,即重写和覆盖。而旧式类(经典类)遵从深度优先继承,即谁定义的方法和属性更多则继承谁。
python3只有新式类,故遵从广度优先继承。
这里牵扯到一个概念,即重写和重载的区别

重写:
就是重新写一个方法然后覆盖掉之前的。

重载:
python中不存在重载。在其他编程语言中,对函数有重载这个概念,即当函数名相同,但参数类型和数量不同时,使用重载,这时重名函数可以同时存在,在对应不同的条件时运行其中适用的。如果函数名、参数类型和数量相同则会报错。

3、多态

在继承的基础上,父类引用指向子类实例的现象,叫做多态。

五、异常处理

1、概念

程序在运行过程中,因为某些原因(BUG、用户误操作、软硬件、网络……),引起的程序奔溃,无法正常运行的现象,叫做异常。我们处理异常就是为了使代码更加稳定的运行,异常处理是一种容错。

2、处理方法

用try—except抓取处理异常
try用来抓取异常,正常情况下不会进入except,一旦出现异常,则立即进入except中对其进行处理。finally下的语句为必须执行的代码,不管有无异常都会执行,优先级最高。语句如下:

try:
	# 可能出现异常代码

except:
	# 如果说出现了异常,则代码立刻就进入except

finally:
	#必须要执行的代码

这里我们通过一道题理解:
输入两个数,计算第一个数与第一个数和第二个数之商的和(num1+ num1/ num2)

num = 0
try:
    num = int(input("请输入一个数:"))
    a = int(input("请再输入一个数:"))
    b = num / a
except ValueError as e:						#此为检测异常并显示异常信息的语句
    print("出现异常,信息是:", e)
    num = int(input("必须是整数,请再次输入:"))
    a = int(input("请再输入一个数:"))
except ZeroDivisionError as z:				#此为检测异常并显示异常信息的语句
    print("出现异常,信息是:", z)
    a = int(input("除数不能为0,请再次输入:"))
except Exception as e:						#此为检测异常并显示异常信息的语句
    print("其他错误")
finally:									#不论是否异常都会执行
    print("zzy")


b = num / a

print(f' {num} + {b} = {num + b}')

结果为:
正常情况:
在这里插入图片描述
第一个数输入异常:
在这里插入图片描述
第二个数输入异常:
在这里插入图片描述
除数为0异常:
在这里插入图片描述

面向对象的学习基本完成,后面开始python高级部分的学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值