• py11_Python 类间关系 依赖/关联/继承


    ##################################################

    目录

    活动简介

    Python 类间关系

    Python 依赖

    Python 关联

    一对一关联

    示例一对多关联

    Python 继承

    示例 Python 单继承

    Python 继承机制


    ##################################################

    活动简介

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…

    欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!

    ##################################################

    Python 类间关系

    ——————————

    Python 依赖

            用实例方法执行某个功能时

    如果需要使用另一个类的实例对象中的方法来完成 则称这两个类之间存在关联关系

            下面的例子中:

            定义了 A、B、C 三个类
            在 A 类的 a() 方法中 可以使用 B 类或 C 类的实例对象作为参数
            因为在 A 类方法中实现时需要 C 类实例调用 eat() 方法完成 所以这两个类之间存在依赖关系!

            cmd demo:

    1. >>> class A:
    2. ... def a(self, object):
    3. ... object.eat()
    4. ... print ( "开心干饭.." )
    5. ...
    6. >>> class B():
    7. ... def eat(self):
    8. ... print ( "女朋友端来蛋炒饭(糊了)" )
    9. ...
    10. >>> class C:
    11. ... def eat(self):
    12. ... print ( "妹妹端来饺子(玉米肉馅的)" )
    13. ...
    14. >>> me = A()
    15. >>> mi = B()
    16. >>> jiao = C()
    17. >>> me.a(mi)
    18. 女朋友端来蛋炒饭(糊了)
    19. 开心干饭..
    20. >>> me.a(jiao)
    21. 妹妹端来饺子(玉米肉馅的)
    22. 开心干饭..
    23. >>>

            注释版本 VSCode code:

    1. class A:
    2. # A 类
    3. def a(self, object):
    4. # a 方法中的 object 可以随意命名 只要传参为实例即可
    5. object.eat() # 调用实参对象中的 eat() 函数
    6. print ( "开心干饭.." )
    7. class B():
    8. # B 类
    9. def eat(self):
    10. # 炒糊的蛋炒饭
    11. print ( "女朋友端来蛋炒饭(糊了)" )
    12. class C:
    13. # C 类
    14. def eat(self):
    15. # 香喷喷的玉米肉馅饺子!
    16. print ( "妹妹端来饺子(玉米肉馅的)" )
    17. me = A() # 实例化你
    18. mi = B() # 实例化米饭
    19. jiao = C() # 实例化饺子
    20. me.a(mi) # 你吃糊米饭
    21. me.a(jiao) # 你吃香饺子

    ——————————

    Python 关联

            关联关系是什么?

    一个类的属性类型是另外一个类的类型 则称这两个类之间存在关联关系

            根据属性是单值或多值 关联关系又分为

    一对一关联

    一对多关联

            等等

    %%%%%

    一对一关联

            示例一对一关联:

            下面例子中的 Boy 类中的属性 girl 是 Girl 类的实例对象 这两个类之间存在一对一关联关系!

            VSCode code:

    1. class Girl:
    2. # 女朋友
    3. def __init__ (self, name):
    4. # 魔术方法 初始化的时候设置当前实例对象姓名
    5. self.name = name
    6. class Boy:
    7. # 男朋友
    8. def __init__ (self, name, girl = None): # 对象参数声明的时候 None
    9. # 魔术方法 初始化的时候給一个对象的属性设置成另一个类的对象
    10. self.girl = girl; self.name = name # new 了一个女朋友对象!!!然后当前男朋友实例对象姓名为 name
    11. def go(self):
    12. if self.girl:
    13. # 如果当前实例的 girl 不为空
    14. print ( "[", self.name, "] 说七夕了, [", self.girl.name,"] 跟我走!" )
    15. else:
    16. # 如果当前实例的 girl 为空
    17. print ( "七夕了留下 [", self.name , "]一个人 emo ……" )
    18. girl_1 = Girl ( "董小姐" ) # new 一个董小姐
    19. boy_1 = Boy ( "斑马", girl_1 ) # new 一个男朋友 女朋友对象是董小姐
    20. boy_1.go() # 男朋友开始得意
    21. boy_2 = Boy("皮皮虾") # new 一个单身狗
    22. boy_2.go() # 单身狗 e 了

            执行结果如下 VSCode demo:

    1. Windows PowerShell
    2. 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
    3. PS C:\Users\byme> python -u "e:\PY\test.py"
    4. [ 斑马 ] 说七夕了, [ 董小姐 ] 跟我走!
    5. 七夕了留下 [ 皮皮虾 ]一个人 emo ……
    6. PS C:\Users\byme>

    %%%%%

    示例一对多关联

            下面演示一对多关联:

            下面例子中表示的是一对多关联

            鱼塘/YuTang 类中的属性 girlList 是 鱼儿/Yu 类的实例对象集合

            这两个类之间存在一对多关联关系

            VSCode code:

    1. class YuTang:
    2. # 鱼塘类
    3. def __init__(self, name):
    4. # 魔术方法 初始化鱼塘信息
    5. self.girlList = [] # 这里是池塘 存放好多鱼
    6. self.name = name # 这是鱼儿名字
    7. def yang(self, yu):
    8. # 养鱼方法
    9. self.girlList.append (yu); print ( "[", yu.name , "]跳入鱼塘" ) # 增加一条鱼
    10. def pao(self):
    11. # 点名鱼儿吐泡泡方法
    12. for i in self.girlList:
    13. i.paopao()
    14. class Yu:
    15. # 鱼儿类
    16. def __init__ (self, name):
    17. # 魔术方法 初始化鱼儿信息
    18. self.name = name # 鱼儿名字
    19. def paopao(self):
    20. # 鱼儿在吐泡泡
    21. print ( "[", self.name , "] 吐了个泡泡.." )
    22. yt_1 = YuTang("鱼塘一号") # 实例化鱼塘对象
    23. print ( "鱼塘已经准备完毕..\n" )
    24. yu_1 = Yu ( "鱼儿一号" ) # 实例化鱼儿
    25. yu_2 = Yu ( "鱼儿二号" )
    26. yu_3 = Yu ( "鱼儿三号" )
    27. print ( "鱼儿已经准备完毕..\n" )
    28. yt_1.yang(yu_1) # 开始养鱼
    29. yt_1.yang(yu_2)
    30. yt_1.yang(yu_3)
    31. print ( "鱼儿已经全部进入鱼塘..\n" )
    32. yt_1.pao() # 鱼儿开始吐泡泡
    33. print ( "鱼儿已经全部吐完泡泡..\n" )

            执行结果 VSCode demo:

    1. Windows PowerShell
    2. 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
    3. PS C:\Users\byme> python -u "e:\PY\test.py"
    4. 鱼塘已经准备完毕..
    5. 鱼儿已经准备完毕..
    6. [ 鱼儿一号 ]跳入鱼塘
    7. [ 鱼儿二号 ]跳入鱼塘
    8. [ 鱼儿三号 ]跳入鱼塘
    9. 鱼儿已经全部进入鱼塘..
    10. [ 鱼儿一号 ] 吐了个泡泡..
    11. [ 鱼儿二号 ] 吐了个泡泡..
    12. [ 鱼儿三号 ] 吐了个泡泡..
    13. 鱼儿已经全部吐完泡泡..
    14. PS C:\Users\byme>

    ——————————

    Python 继承

            类继承是在已有类基础上构建新类的机制 该新建类也成为子类

            子类可以增加新的属性或功能 也可以继承父类的功能

            继承所描述的是

    is-a

            的关系

            通过继承机制可以复用以前代码大大提高了开发效率!

            子类继承父类语法如下:

    1. class (父类):
    2. # 语句

            需要注意圆括号中父类的顺序

            若是父类中有相同的方法名 而在子类使用时未指定 则 Python 从左至右搜索 即:

    方法在子类中未找到时从左到右查找父类中是否包含方法

    %%%%%

    示例 Python 单继承

            一般来说 为防止出现歧义 尽量在类定义时候避免多继承!

            这是一个单继承示例 VSCode code:

    1. class Ren:
    2. # 定义人类
    3. # 定义公有属性
    4. name = "" # 姓名 String 默认为空
    5. age = 0 # 年龄 int 默认为 0
    6. # 定义私有属性 在类外部无法直接进行访问
    7. __tiZhong = 0 # 体重 int
    8. __shenGao = 0.0 # 身高 float
    9. # 定义构造方法
    10. def __init__( self, n, a, t, s ):
    11. # 初始化类成员属性 参数分别为:当前对象, 姓名, 年龄, 体重, 身高
    12. self.name = n
    13. self.age = a
    14. self.__tiZhong = t
    15. self.__shenGao = s
    16. # 定义公有方法
    17. def pr(self):
    18. # 自我介绍
    19. print ( "学生 [%s] 今年 [%d] 岁 体重 [%d] 身高 [%.2f] " % ( self.name, self.age, self.__tiZhong, self.__shenGao ) )
    20. class Student(Ren):
    21. # 学生类 单继承一个 人类
    22. grade = '' # 年级 char 默认空
    23. def __init__( self, n, a, t, s, g ):
    24. # 本类构造函数 参数分别为:当前对象, 姓名, 年龄, 体重, 身高, 年级
    25. Ren.__init__( self, n, a, t, s ) # 调用父类构造函数 参数分别为:当前对象, 姓名, 年龄, 体重, 身高
    26. self.grade = g # 赋值几年级
    27. def pr(self):
    28. # 自我介绍
    29. print ( "学生 [%s] 今年 [%d] 岁 在读 [%c] 年级" % ( self.name, self.age, self.grade ) )
    30. r_1 = Ren ( "燃吹", 20, 90, 1.89 ) # 创建 父类/基类 测试对象
    31. r_1.pr() # 调用 父类/基类 函数
    32. stu_1 = Student ( "燃吹", 20, 90, 1.89, '4' ) # 创建 子类/派生类 测试对象
    33. stu_1.pr() # 调用 子类/派生类 函数

            测试结果 VSCode demo:

    1. Windows PowerShell
    2. 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
    3. PS C:\Users\byme> python -u "e:\PY\test.py"
    4. 学生 [燃吹] 今年 [20] 岁 体重 [90] 身高 [1.89]
    5. 学生 [燃吹] 今年 [20] 岁 在读 [4] 年级
    6. PS C:\Users\byme>

    %%%%%

    Python 继承机制

            在 Python 中使用继承机制时有以下几点需要注意:

    1. 子类拥有父类的属性和方法
    2. 子类可以创建自己属性和方法
    3. 子类可以对父类的方法进行覆盖实现
    4. 子类可重新定义父类中的属性
    5. 一个父类可由多个子类继承
    6. 一个子类也可继承多个父类
    7. 如果父类定义了
    8. __init__()
    9. 方法
    10. 子类也定义了自己的
    11. __init__()
    12. 方法
    13. 并且还要使用父类的
    14. __init__()
    15. 方法
    16. 子类需要显式调用父类的
    17. __init__()
    18. 方法
    19. 如果子类需要扩展父类的初始化行为
    20. 可以添加
    21. __init__()
    22. 方法参数……
    23. 当继承的多个父类中有相同的属性或方法时
    24. 会使用最后一个继承父类的属性或方法!

  • 相关阅读:
    异步编程 - 13 高性能线程间消息传递库 Disruptor
    大数据编程技术基础实验八:Flume实验——文件数据Flume至HDFS
    python-Django_根据数据库表反向生成Model
    【测试开发之路】Java & Selenium自动化
    永磁无刷直流电机(无框力矩电机)电流和速度控制器的设计
    TCP全方面了解与学习
    Practical Deep Raw Image Denoisingon Mobile Devices
    【STL】:反向迭代器
    深度学习(七)——神经网络的卷积操作
    2023年中国石英矿资源现状及行业市场供需分析[图]
  • 原文地址:https://blog.csdn.net/m0_67268286/article/details/126296343