python学习笔记-python中的多态

Posted 工具晨的日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记-python中的多态相关的知识,希望对你有一定的参考价值。

本文为了说明例子,用中文写在了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)

不然会报错

以上是关于python学习笔记-python中的多态的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记-面向对象进阶封装多态继承

python基础学习笔记

Python 学习笔记 - 面向对象(基础)

python学习笔记——柒

python学习笔记012——pdb调试

Python 3学习笔记