python学习笔记-python中的多态

本文介绍了Python中的多态概念,展示了如何通过继承和统一接口实现多态。多态允许在不考虑对象具体类型的情况下调用方法,提供了一种更灵活的编程方式。示例中创建了载具、坦克、装甲车和武直类,并定义了移动方法。通过多态,可以对不同类型的对象调用相同的移动方法,实现了不同类型的载具以各自的方式移动。同时,文章还讨论了使用抽象基类(ABC)来强制子类实现特定方法,确保类的完整性和一致性。
摘要由CSDN通过智能技术生成

本文为了说明例子,用中文写在了class里面,一般编程最好不要那么写

所谓多态

,就是同一种事物的多种形态
比如

class 载具:
    pass

class 坦克(载具):
    pass

class 装甲车(载具):
    pass

class 武直(载具):
    pass

多态的作用

可以在不考虑对象具体类型的情况下而直接使用对象

class 载具: # 统一所有子类的方法
    def 移动(self):
        print('载具开始移动',end=' ')

class 坦克(载具):
    def 移动(self):
        super().移动()
        print('履带机动')

class 装甲车(载具):
    def 移动(self):
        super().移动()
        print('轮式机动')

class 武直(载具):
    def 移动(self):
        super().移动()
        print('飞行机动')


print(坦克(),装甲车(),武直())
print('='*100)

效果
在这里插入图片描述

class 载具: # 统一所有子类的方法
    def 移动(self):
        print('载具开始移动',end=' ')

class 坦克(载具):
    def 移动(self):
        super().移动()
        print('履带机动')

class 装甲车(载具):
    def 移动(self):
        super().移动()
        print('轮式机动')

class 武直(载具):
    def 移动(self):
        super().移动()
        print('飞行机动')


#定义
objA=坦克()
objB=装甲车()
objC=武直()

#调用
objA.移动()
objB.移动()
objC.移动()

效果
在这里插入图片描述

定义统一的接口

class 载具: # 统一所有子类的方法
    def 移动(self):
        print('载具开始移动',end=' ')

class 坦克(载具):
    def 移动(self):
        super().移动()
        print('履带机动')

class 装甲车(载具):
    def 移动(self):
        super().移动()
        print('轮式机动')

class 武直(载具):
    def 移动(self):
        super().移动()
        print('飞行机动')

##定义
objA=坦克()
objB=装甲车()
objC=武直()
#定义统一的接口
def 载具移动(载具):
    载具.移动()

载具移动(objA)
载具移动(objB)
载具移动(objC)

效果
在这里插入图片描述

统一所有子类的标准

import abc

class 载具(metaclass=abc.ABCMeta): # 统一所有子类的标准
	@abc.abstractmethod
	def 移动(self):
		print('载具开始移动',end=' ')

class 坦克(载具):
	def 移动(self):
		super().移动()
		print('履带机动')

class 装甲车(载具):
	def 移动(self):
		super().移动()
		print('轮式机动')

class 武直(载具):
	def 移动(self):
		super().移动()
		print('飞行机动')








##定义
objA=坦克()
objB=装甲车()
objC=武直()

#定义统一的接口
def 载具移动(载具):
	载具.移动()

载具移动(objA)
载具移动(objB)
载具移动(objC)

效果与前面一致,不过区别在于不能直接在class下写pass,必须要有一个父类的功能(比如这里的移动),哪怕这个移动本身没有功能,比如:

import abc

class 载具(metaclass=abc.ABCMeta): # 统一所有子类的标准
	@abc.abstractmethod
	def 移动(self):
		print('载具开始移动',end=' ')

class 坦克(载具):
	def 移动(self):
		pass

class 装甲车(载具):
	def 移动(self):
		pass

class 武直(载具):
	def 移动(self):
		pass








##定义
objA=坦克()
objB=装甲车()
objC=武直()

#定义统一的接口
def 载具移动(载具):
	载具.移动()

载具移动(objA)
载具移动(objB)
载具移动(objC)

不然会报错
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丰。。

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值