当前位置: 首页 > news >正文

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__(父类初始参数)

 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

相关文章:

  • 网站建设项目培训/比百度好用的搜索软件手机版
  • 怒江北京网站建设/做市场推广应该掌握什么技巧
  • 乌兰察布网站建设/网站制作厂家有哪些
  • 郑州hi宝贝网站建设公司/今天的新闻头条最新消息
  • 下载微信公众号平台官网/最专业的seo公司
  • 教育网站前置审批系统/优化的意思
  • Ubuntu18安装docker详细教程
  • 【C++修炼之路】6. 内存管理
  • 网络安全为啥要学Linux系统
  • 面了个腾讯拿28k跳槽出来的,真正见识到了跳槽天花板
  • WEB安全之PHP安全开发 博客系统(四):文章管理之列表的制作与修改(保存更改)
  • 超级干货!如何仅花5步就能写出一篇领导绝对满意的数据分析报告
  • 创客匠人工具助力教培机构快速适应线上教学
  • PyQt PySide版本与Python版本选择
  • 趁这个软件还没倒闭,我连夜用Python下载了所有壁纸...
  • 【Arduino+ESP32专题】案例:Modbus Slave的使用
  • 第六章 python数据容器
  • 店铺营收未达标,是客单价的问题吗?