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

Python的类和对象(3)

1、类的继承
父类:被继承
子类:继承者 – 可以使用父类的所有属性和方法、大大简化代码。

语法:在类名字后加上(继承的类名字)

# 定义类 -- 父类
class Car:
    # 定义类属性
    wheel = "有车轮"
    engine = "有引擎"

    # 初始化函数--特殊的实例方法
    def __init__(self, cl="黑色", lg="奔驰"):  # 定义函数的参数
        print("正在生成一辆车....")
        # 定义实例属性:
        self.color = cl
        self.logo = lg

    # 定义实例方法
    def run(self, light="白炽光"):
        print("一辆车正在开....")
        # 实例方法内,可以获取实例属性,也可以类属性  前面self.
        print(f"正在开的这辆车颜色是:{self.color}, 车的引擎是:{self.engine}")
        # 类里面调用:实例方法可以相互调用,self.实例方法名
        # self.body = "有车身"
        print(f"正在开的车车灯是:{light}")
        self.recharge()


    # 定义实例方法2
    def recharge(self):
        print("一辆车正在加油...")
        print(f"正在加油车的颜色是:{self.color}")

    # 定义类方法
    @classmethod     # 用来申明是一个类方法
    def get_engine(cls):  # cls在类里面表示类本身
        print("这是一个类方法....")
        print(f"车的引擎是:{cls.engine}") # 类方法可以获取类属性,不可以获取实例属性

    # 定义类方法
    @classmethod
    def get_wheel(cls):
        print("这是一个另外的类方法....")
        cls.get_engine()  # 类方法内部可以调用类方法--相互调用
        # cls.recharge()  # 类方法内部不可以调用实例方法的--报错


# 定义新的类 -- 子类,继承父类的一切
class NewEnergyCar(Car):
    pass


# 实例化对象
new_car = NewEnergyCar()

# 继承后,子类可以使用父类的所有属性和方法
print(new_car.engine)  # 类属性
print(new_car.color)  # 实例属性
new_car.get_engine()   # 类方法
new_car.recharge()  # 实例方法

2、子类的方法和属性

子类也可以有自己的属性和方法,定义自己的实例方法

  • 子类的对象可以调用子类的方法和属性
  • 父类的对象不可以调用子类的方法和属性

3、问题: 子类和父类有相同的名字的方法,优先用谁的么?

  • 优先使用子类自己的方法 ,就近原则。
  • 如果想保留父类的同名方法的使用,可以使用超继承 super().同名方法,表示在子类调用父类的方法。
# 定义类 -- 父类
class Car:
    # 定义类属性
    wheel = "有车轮"
    engine = "有引擎"

    # 初始化函数--特殊的实例方法
    def __init__(self, cl="黑色", lg="奔驰"):  # 定义函数的参数
        print("正在生成一辆车....")
        # 定义实例属性:
        self.color = cl
        self.logo = lg

    # 定义实例方法
    def run(self, light="白炽光"):
        print("一辆车正在开....")
        # 实例方法内,可以获取实例属性,也可以类属性  前面self.
        print(f"正在开的这辆车颜色是:{self.color}, 车的引擎是:{self.engine}")
        # 类里面调用:实例方法可以相互调用,self.实例方法名
        # self.body = "有车身"
        print(f"正在开的车车灯是:{light}")
        self.recharge()


    # 定义实例方法2
    def recharge(self):
        print("一辆车正在加油...")
        print(f"正在加油车的颜色是:{self.color}")

    # 定义类方法
    @classmethod     # 用来申明是一个类方法
    def get_engine(cls):  # cls在类里面表示类本身
        print("这是一个类方法....")
        print(f"车的引擎是:{cls.engine}") # 类方法可以获取类属性,不可以获取实例属性

    # 定义类方法
    @classmethod
    def get_wheel(cls):
        print("这是一个另外的类方法....")
        cls.get_engine()  # 类方法内部可以调用类方法--相互调用
        # cls.recharge()  # 类方法内部不可以调用实例方法的--报错


# 定义新的类 -- 子类,继承父类的一切
class NewEnergyCar(Car):
    # 子类的实例方法
    def save_money(self):
        self.battery = "有电池"  # 子类的属性
        print("新能源车可以省油钱...")

    # 跟父类同名的方法
    def recharge(self):
        print("新能源车正在充电....")
        super().recharge()  # 表示在子类调用父类的方法。

4、
1、子类可以多层继承:爷爷-爸爸-孙子。

  • 可以使用爷爷类、爸爸类的所有的属性和方法

2、子类可以多重继承:同时继承多个父类,那么拥有所有父类的方法和属性。

  • 多个爸爸 Robot(NewEnergyCar,AutoCar)
  • 多个爸爸类的所有的属性和方法
# 定义类 -- 爷爷类
class Car:
    # 定义类属性
    wheel = "有车轮"
    engine = "有引擎"

    # 初始化函数--特殊的实例方法
    def __init__(self, cl="黑色", lg="奔驰"):  # 定义函数的参数
        print("正在生成一辆车....")
        # 定义实例属性:
        self.color = cl
        self.logo = lg

    # 定义实例方法
    def run(self, light="白炽光"):
        print("一辆车正在开....")
        # 实例方法内,可以获取实例属性,也可以类属性  前面self.
        print(f"正在开的这辆车颜色是:{self.color}, 车的引擎是:{self.engine}")
        # 类里面调用:实例方法可以相互调用,self.实例方法名
        # self.body = "有车身"
        print(f"正在开的车车灯是:{light}")
        self.recharge()


    # 定义实例方法2
    def recharge(self):
        print("一辆车正在加油...")
        print(f"正在加油车的颜色是:{self.color}")

    # 定义类方法
    @classmethod     # 用来申明是一个类方法
    def get_engine(cls):  # cls在类里面表示类本身
        print("这是一个类方法....")
        print(f"车的引擎是:{cls.engine}") # 类方法可以获取类属性,不可以获取实例属性

    # 定义类方法
    @classmethod
    def get_wheel(cls):
        print("这是一个另外的类方法....")
        cls.get_engine()  # 类方法内部可以调用类方法--相互调用
        # cls.recharge()  # 类方法内部不可以调用实例方法的--报错


# 定义新的类 -- 爸爸类
class NewEnergyCar(Car):
    # 子类的实例方法
    def save_money(self):
        self.battery = "有电池"  # 子类的属性
        print("新能源车可以省油钱...")

    # 跟父类同名的方法
    def recharge(self):
        print("新能源车正在充电....")
        super().recharge()  # 表示在子类调用父类的方法。


# 定义自动驾驶车类 -- 另一个爸爸类
class AutoCar:
    def auto(self):
        print("这个车可自动驾驶")


# # 定义机器人类  -- 孙子类  -- 多层继承: 爷爷-爸爸-孙子
# class Robot(NewEnergyCar):
#     pass
# # 实例化对象 Robot
# new_car = Robot()
#
# new_car.run()
# new_car.save_money()


# 定义机器人类  -- 孙子类  -- 多重继承,继承多个爸爸
class Robot(NewEnergyCar,AutoCar):
    pass

# 实例化对象 Robot
new_car = Robot()

new_car.save_money()
new_car.auto()

相关文章:

  • HTML中滚动加载的实现
  • 第一节:关于数组的算法(python版)
  • ESP32(2)WIFI链接
  • 天梯赛 L2-004 这是二叉搜索树吗?
  • C#设计模式Demo——MVC
  • matlab中如何集成使用python
  • 文捕---博客文章下载工具
  • AI入门7:python三种API方式调用本地Ollama+DeepSeek
  • bak 文件
  • 深海300米的低温环境中的BMS优化方法
  • STM32---FreeRTOS事件标志组
  • openEuler24.03 LTS下安装MySQL8
  • dfs(十二)21. 合并两个有序链表 递归解决
  • Spring 框架中常用注解和使用方法
  • 如何管理需求变更
  • 做游戏的发展方向
  • Skyeye 云智能制造办公系统 VUE 版本 v3.15.13 发布
  • ChatGPT and Claude国内使用站点
  • CareUEyes护眼软件深度解析:为你的双眼保驾护航
  • 基于Gemini 生成 Gemini Embedding
  • 《水饺皇后》领跑五一档票房,《哪吒2》上座率仍居第一
  • 魔都眼|买买买,老铺黄金新店开业被挤爆:有人排队5小时
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 日菲同意扩大安全合作,外交部:反对任何在本地区拉帮结派的做法
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……