python面向对象的编程---类
- 📢博客主页:盾山狂热粉的博客_CSDN博客-C、C++语言,机器视觉领域博主
- 📢努力努力再努力嗷~~~✨
💡大纲
⭕与面向过程的编程相比,面向对象的编程显得更符合人们的思维逻辑。
👉什么是对象、什么是类
👉类的定义:类名、属性(成员变量)、方法(成员函数)
👉创建类的实例(对象):访问成员变量与成员函数、修改成员变量与成员函数
👉类的继承与多态
一、什么是对象?什么是类?
(一)什么是对象?
👉人们更擅长对于某一个对象进行处理(函数),对需要处理的对象进行内部信息(属性)的操作
👉一切皆对象,每个对象都有自己的属性,每个对象都有自己的动作行为
(二)什么是类?
👉类是对象的载体
👉就是很多很多同类的对象(比如狼狗、哈士奇、比熊)的公共特征抽象出来,创建通用的类
(三)类与对象
1、创建类
class Dog():
def __init__(self, name): # 初始化属性与行为
self.name = name
def action_run(self):
print(self.name + " is running")
2、实体化对象
my_dog = Dog("tiantian") # 初始化输入参数
3、通过对象调用成员信息
print(my_dog.name) # tiantian
my_dog.action_run() # tiantian is running
二、类的定义
💡三要素:类名、属性、方法
(一)类的命名要求
👉类名要有实际意义,尽量做到见名知意,对于复杂的类名需要对其功能进行描述
👉驼峰命名法:单词首字母大写
⚠️和函数一样,类的前后也要空两行
"""类前空两行"""
class Dog():
"""对该类的简单介绍"""
pass
"""类后空两行"""
(二)类的属性(内部定义的变量)、方法(内部定义的函数)
1、初始化类的属性
💡def __init__(self,要传递的参数)
2、初始化一个类
👉也可以在类中直接给内部定义的变量赋值
class Car():
def __init__(self, brand, model, year):
"""初始化汽车属性:品牌、车型、出场年份"""
self.brand = brand
self.model = model
self.year = year
self.mile = 0 # 新车总里程初始化为0
def get_parameters(self): # self不能省
"""获取汽车主要信息"""
print("品牌:{};型号:{};出厂年份:{}".format(self.brand, self.model, self.year))
def get_mile(self):
"""获取总里程"""
return "行车总里程:{}公里".format(self.mile)
三、创建实例
(一)实例的创建
👉将实例赋值给对象,传入相应的参数
👉对象 = 类名(必要的初始化参数)
my_car = Car("Audi", "A6L", 2022)
(二)访问属性
👉实例名.属性名
print(my_car.brand)
print(my_car.model)
print(my_car.year)
'''
Audi
A6L
2022
'''
(三)访问行为
👉实例名.方法名(必要的参数)
my_car.get_parameters() # 品牌:Audi 型号:A6L 出厂年份:2022
mile = my_car.get_mile()
print(mile) # 行车总里程:0公里
(四)修改属性
1、直接修改
👉在实例化对象的时候直接赋新值
my_car = Car("BYD", "汉", 2020)
my_car.get_parameters() # 品牌:BYD 型号:汉 出厂年份:2020
👉先访问,后修改
print(my_car.mile) # 0
my_car.mile = 15000
print(my_car.mile) # 15000
2、通过方法修改属性
def set_mile(self, distance):
self.mile = distance
my_car = Car("BYD", "宋", 2020)
print(my_car.get_mile()) # 0
my_car.set_mile(15000)
print(my_car.get_mile()) # 15000
3、拓展功能
👉对于设置里程的函数,给定的值不能是负值
def set_mile(self, distance):
"""设置总里程数"""
if distance >= 0:
self.mile = distance
else:
print("里程数不能为负!")
👉车辆出厂里程为0,对后续增加的里程进行累计计算
def increment_mile(self, increment_distance):
"""总里程数累计"""
if increment_distance >= 0:
self.mile += increment_distance
else:
print("新增里程数不能为负!")
四、类的继承
💡子类可以得到父类所有的东西
(一)简单的继承
1、父类
class Car():
"""初始化汽车属性:品牌、车型、出场年份"""
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
self.mileage = 0 # 新车总里程初始化为0
"""获取汽车主要信息"""
def get_parameters(self): # self不能省
print("品牌:{};型号:{};出厂年份:{}".format(self.brand, self.model, self.year))
"""设置总里程数"""
def set_mile(self, distance):
if distance >= 0:
self.mile = distance
else:
print("里程数不能为负!")
"""总里程数累计"""
def increment_mile(self, increment_distance):
if increment_distance >= 0:
self.mile += increment_distance
else:
print("新增里程数不能为负!")
2、子类
💡class 子类名(父类名)
💡super().__init__(父类初始参数)
👉自动继承父类的所有方法
"""模拟电动汽车"""
class ElectricCar(Car):
"""初始化电动汽车属性"""
def __init__(self, brand, model, year):
super().__init__(brand, model, year) # 声明继承父类的属性
# 调用
my_electric_car = ElectricCar("NextWeek", "FF91", 2046)
my_electric_car.get_parameters() # 品牌:NextWeek 型号:FF91 出厂年份:2046
(二)给子类添加属性和方法
👉在初始化列表中增加属性,也可以在类的内部增加属性
class ElectricCar(Car):
"""初始化电动汽车属性"""
def __init__(self, brand, model, year, bettery_capacity):
super().__init__(brand, model, year)
self.bettery_capacity = bettery_capacity # 电池容量
self.bettery_remain_capacity = bettery_capacity # 电池剩余电量,默认是充满的
self.electric2distance_ratio = 5 # 电量距离换算系数 5公里/kW.h
self.remain_range = self.bettery_remain_capacity * \
self.electric2distance_ratio # 剩余可行驶里程
"""查看当前电池电量"""
def get_electric_quantit(self):
print("当前电池剩余电量:{} kW.h".format(self.bettery_remain_capacity))
"""设置电池剩余电量,重新计算电量可支撑行驶里程"""
def set_electric_quantity(self, bettery_remain_capacity):
if bettery_remain_capacity >= 0 and bettery_remain_capacity <= self.bettery_capacity:
self.bettery_remain_capacity = bettery_remain_capacity
self.remain_range = self.bettery_remain_capacity*self.electric2distance_ratio
else:
print("电量未设置在合理范围!")
"""查看剩余可行驶里程"""
def get_remainder_range(self):
print("当前电量还可以继续驾驶 {} 公里".format(self.remain_range))
👉 函数调用与属性重设
my_electric_car = ElectricCar("NextWeek", "FF91", 2046, 70)
my_electric_car.get_electric_quantit() # 获取当前电池电量
my_electric_car.get_remainder_range() # 获取当前剩余可行驶里程
'''
当前电池剩余电量:70 kW.h
当前电量还可以继续驾驶 350 公里
'''
my_electric_car.set_electric_quantity(50) # 重设电池电量
my_electric_car.get_electric_quantit() # 获取当前电池电量
my_electric_car.get_remainder_range() # 获取当前剩余可行驶里程
'''
当前电池剩余电量:50 kW.h
当前电量还可以继续驾驶 250 公里
'''
(三)多态---重写父类方法
👉在调用该方法的时候,先在重写的子类中查找是否符合调用,不符合再去父类中找
# """获取汽车主要信息"""
def get_parameters()(self):
print("品牌:{} 型号:{} 出厂年份:{} 续航里程:{} 公里"
.format(self.brand, self.model, self.year, self.bettery_size*self.electric2distance_ratio))
(四)进一步优化
💡可以将电池作为一个类,单独用来存储相关信息,然后用电动车子类来使用该类
"""模拟电动汽车的电池"""
class Bettery():
def __init__(self, bettery_capacity = 90):
self.bettery_capacity = bettery_capacity # 电池容量
self.bettery_remain_capacity = bettery_capacity # 电池剩余电量
self.electric2distance_ratio = 5 # 电量距离换算系数 5公里/kW.h
self.remain_range = self.bettery_remain_capacity*self.electric2distance_ratio # 剩余可行驶里程
"""查看当前电池电量"""
def get_bettery_remain_capacity(self):
print("当前电池剩余电量:{} kW.h".format(self.bettery_remain_capacity))
"""设置电池剩余电量,计重新算电量可支撑行驶里程"""
def set_bettery_remain_capacity(self, bettery_remain_capacity):
if bettery_remain_capacity >= 0 and bettery_remain_capacity <= self.bettery_capacity:
self.bettery_remain_capacity = bettery_remain_capacity
self.remain_range = self.bettery_remain_capacity*self.electric2distance_ratio
else:
print("电量未设置在合理范围!")
"""查看剩余可行驶里程"""
def get_remain_range(self):
print("当前电量还可以继续驾驶 {} 公里".format(self.remain_range))
class ElectricCar(Car):
"""模拟电动汽车"""
def __init__(self, brand, model, year, bettery_capacity):
"""初始化电动汽车属性"""
super().__init__(brand, model, year) # 声明继承父类的属性
self.bettery = Bettery(bettery_capacity) # 电池
def get_parameters(self):
"""获取汽车主要信息"""
print("品牌:{} 型号:{} 出厂年份:{} 续航里程:{} 公里"
.format(self.brand, self.model, self.year,
self.bettery.bettery_capacity*self.bettery.electric2distance_ratio))
👉 函数调用与属性重设
my_electric_car = ElectricCar("NextWeek", "FF91", 2046, 70)
my_electric_car.get_parameters()
# 品牌:NextWeek 型号:FF91 出厂年份:2046 续航里程:350 公里
my_electric_car.bettery.get_bettery_remain_capacity() # 获取当前电池电量
# 当前电池剩余电量:70 kW.h
my_electric_car.bettery.set_bettery_remain_capacity(50) # 重设电池电量
my_electric_car.bettery.get_bettery_remain_capacity() # 获取当前电池电量
# 当前电池剩余电量:50 kW.h
my_electric_car.bettery.get_remain_range() # 获取当前剩余可行驶里程
# 当前电量还可以继续驾驶 250 公里
⭕总结
👉如何定义和调用一个类?class 类名:def __init__(初始化参数)
👉什么是类的属性?相当于内部的变量
👉类的方法如何定义?def 函数名(self, 参数)
👉如何进行类的继承?class 子类名(父类名)super().__init__(父类初始参数)
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!