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

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

目录

活动简介

Python 类间关系

Python 依赖

Python 关联

一对一关联

示例一对多关联

Python 继承

示例 Python 单继承

Python 继承机制


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

活动简介

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

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

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

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

Python 类间关系

——————————

Python 依赖

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

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

        下面的例子中:

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

        cmd demo:

>>> class A:
...     def a(self, object):
...             object.eat()
...             print ( "开心干饭.." )
...
>>> class B():
...     def eat(self):
...             print ( "女朋友端来蛋炒饭(糊了)" )
...
>>> class C:
...     def eat(self):
...             print ( "妹妹端来饺子(玉米肉馅的)" )
...
>>> me = A()
>>> mi = B()
>>> jiao = C()
>>> me.a(mi)
女朋友端来蛋炒饭(糊了)
开心干饭..
>>> me.a(jiao)
妹妹端来饺子(玉米肉馅的)
开心干饭..
>>> 

        注释版本 VSCode code:

class A:
    # A 类
    def a(self, object):
        # a 方法中的 object 可以随意命名 只要传参为实例即可
        object.eat()    # 调用实参对象中的 eat() 函数
        print ( "开心干饭.." )

class B():
    # B 类
    def eat(self):
        # 炒糊的蛋炒饭
        print ( "女朋友端来蛋炒饭(糊了)" )

class C:
    # C 类
    def eat(self):
        # 香喷喷的玉米肉馅饺子!
        print ( "妹妹端来饺子(玉米肉馅的)" )

me = A()    # 实例化你
mi = B()    # 实例化米饭
jiao = C()    # 实例化饺子

me.a(mi)    # 你吃糊米饭
me.a(jiao)    # 你吃香饺子

——————————

Python 关联

        关联关系是什么?

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

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

一对一关联

一对多关联

        等等

%%%%%

一对一关联

        示例一对一关联:

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

        VSCode code:

class Girl:
	# 女朋友
	def __init__ (self, name):
		# 魔术方法 初始化的时候设置当前实例对象姓名
		self.name = name
	
class Boy:
	# 男朋友
	def __init__ (self, name, girl = None): # 对象参数声明的时候 None
		# 魔术方法 初始化的时候給一个对象的属性设置成另一个类的对象
		self.girl = girl; self.name = name	# new 了一个女朋友对象!!!然后当前男朋友实例对象姓名为 name
	def go(self):
		if self.girl:
			# 如果当前实例的 girl 不为空
			print (  "[", self.name, "] 说七夕了, [", self.girl.name,"] 跟我走!" )
		else:
			# 如果当前实例的 girl 为空
			print ( "七夕了留下 [", self.name , "]一个人 emo ……" )

girl_1 = Girl ( "董小姐" )  # new 一个董小姐

boy_1 = Boy ( "斑马", girl_1 )  # new 一个男朋友 女朋友对象是董小姐
boy_1.go()  # 男朋友开始得意

boy_2 = Boy("皮皮虾")   # new 一个单身狗
boy_2.go()  # 单身狗 e 了

        执行结果如下 VSCode demo:

Windows PowerShell
版权所有 (C) 2014 Microsoft Corporation。保留所有权利。

PS C:\Users\byme> python -u "e:\PY\test.py"
[ 斑马 ] 说七夕了, [ 董小姐 ] 跟我走!
七夕了留下 [ 皮皮虾 ]一个人 emo ……
PS C:\Users\byme> 

%%%%%

示例一对多关联

        下面演示一对多关联:

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

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

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

        VSCode code:

class YuTang:
	# 鱼塘类

	def __init__(self, name):
		# 魔术方法 初始化鱼塘信息
		self.girlList = []	# 这里是池塘 存放好多鱼
		self.name = name	# 这是鱼儿名字
		
	def yang(self, yu):
		# 养鱼方法
		self.girlList.append (yu); print ( "[", yu.name , "]跳入鱼塘" )	# 增加一条鱼
		
	def pao(self):
		# 点名鱼儿吐泡泡方法
		for i in self.girlList:
			i.paopao()

class Yu:
	# 鱼儿类

	def __init__ (self, name):
	# 魔术方法 初始化鱼儿信息
		self.name = name	# 鱼儿名字
		
	def paopao(self):
	# 鱼儿在吐泡泡
		print ( "[", self.name , "] 吐了个泡泡.." )

yt_1 = YuTang("鱼塘一号")   # 实例化鱼塘对象
print ( "鱼塘已经准备完毕..\n" )

yu_1 = Yu ( "鱼儿一号" )    # 实例化鱼儿
yu_2 = Yu ( "鱼儿二号" )
yu_3 = Yu ( "鱼儿三号" )
print ( "鱼儿已经准备完毕..\n" )

yt_1.yang(yu_1) # 开始养鱼
yt_1.yang(yu_2)
yt_1.yang(yu_3)
print ( "鱼儿已经全部进入鱼塘..\n" )

yt_1.pao()  # 鱼儿开始吐泡泡
print ( "鱼儿已经全部吐完泡泡..\n" )

        执行结果 VSCode demo:

Windows PowerShell
版权所有 (C) 2014 Microsoft Corporation。保留所有权利。

PS C:\Users\byme> python -u "e:\PY\test.py"
鱼塘已经准备完毕..

鱼儿已经准备完毕..

[ 鱼儿一号 ]跳入鱼塘
[ 鱼儿二号 ]跳入鱼塘
[ 鱼儿三号 ]跳入鱼塘
鱼儿已经全部进入鱼塘..

[ 鱼儿一号 ] 吐了个泡泡..
[ 鱼儿二号 ] 吐了个泡泡..
[ 鱼儿三号 ] 吐了个泡泡..
鱼儿已经全部吐完泡泡..

PS C:\Users\byme> 

——————————

Python 继承

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

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

        继承所描述的是

is-a

        的关系

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

        子类继承父类语法如下:

class 类(父类):
	# 语句

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

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

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

%%%%%

示例 Python 单继承

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

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

class Ren:
	# 定义人类

    # 定义公有属性
    name = ""	# 姓名 String 默认为空
    age = 0 # 年龄 int 默认为 0

    # 定义私有属性 在类外部无法直接进行访问
    __tiZhong = 0    # 体重 int
    __shenGao = 0.0   # 身高 float
    
    # 定义构造方法
    def __init__( self, n, a, t, s ):
        # 初始化类成员属性 参数分别为:当前对象, 姓名, 年龄, 体重, 身高
        self.name = n
        self.age = a
        self.__tiZhong = t
        self.__shenGao = s
    
    # 定义公有方法
    def pr(self):
        # 自我介绍
        print ( "学生 [%s] 今年 [%d] 岁 体重 [%d] 身高 [%.2f] " % ( self.name, self.age, self.__tiZhong, self.__shenGao ) )

class Student(Ren):
    # 学生类 单继承一个 人类

    grade = ''  # 年级 char 默认空
    
    def __init__( self, n, a, t, s, g ):
        # 本类构造函数 参数分别为:当前对象, 姓名, 年龄, 体重, 身高, 年级
        Ren.__init__( self, n, a, t, s )    # 调用父类构造函数 参数分别为:当前对象, 姓名, 年龄, 体重, 身高
        self.grade = g  # 赋值几年级
        
    def pr(self):
        # 自我介绍
        print ( "学生 [%s] 今年 [%d] 岁 在读 [%c] 年级" % ( self.name, self.age, self.grade ) )

r_1 = Ren ( "燃吹", 20, 90, 1.89 )  # 创建 父类/基类 测试对象
r_1.pr()    # 调用 父类/基类 函数

stu_1 = Student ( "燃吹", 20, 90, 1.89, '4' )   # 创建 子类/派生类 测试对象
stu_1.pr()  # 调用 子类/派生类 函数

        测试结果 VSCode demo:

Windows PowerShell
版权所有 (C) 2014 Microsoft Corporation。保留所有权利。

PS C:\Users\byme> python -u "e:\PY\test.py"
学生 [燃吹] 今年 [20] 岁 体重 [90] 身高 [1.89]
学生 [燃吹] 今年 [20] 岁 在读 [4] 年级
PS C:\Users\byme> 

%%%%%

Python 继承机制

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

    子类拥有父类的属性和方法

    子类可以创建自己属性和方法

    子类可以对父类的方法进行覆盖实现

    子类可重新定义父类中的属性

    一个父类可由多个子类继承
    一个子类也可继承多个父类

    如果父类定义了
__init__()
    方法
    子类也定义了自己的
__init__()
    方法
    并且还要使用父类的
__init__()
    方法
    子类需要显式调用父类的
__init__()
    方法
    如果子类需要扩展父类的初始化行为
    可以添加
__init__()
    方法参数……

    当继承的多个父类中有相同的属性或方法时
    会使用最后一个继承父类的属性或方法!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃吹

呜呜呜没钱钱吃饭了……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值