【Python基础知识库】Python中多态与多态性

多态:指的是以类事物有多种形态,如一个抽象类有多个子类,多态的概念依赖于继承;如在java中,一个函数由于函数签名不同,可以有同名的不同函数存在,调用的时候根据函数签名不同自动找到相应的函数执行。简单来说,就是同一事物的多种形态。Python中的多态不是语法,而是一种设计思想,多态的设计就是要完成对不同类型对象使用相同方法调用能得到各自期望的结果。

# 多态:同一种事物的多种形态,动物分为人、猪、狗等等
class Animal:
    def run(self):
        raise AttributeError('子类必须实现这个方法')

class People(Animal):
    def run(self):
        print('人正在走')

class Pig(Animal):
    def run(self):
        print('猪正在散步')

class Dog(Animal):
    def run(self):
        print('狗正在走')

people = People()
pig = Pig()
dog = Dog()

people.run()
pig.run()
dog.run()

# 结果
'''
人正在走
猪正在散步
狗正在走
'''
import abc

# 同一类事物:文件
class File(metaclass=abc.ABCMeta): 
    @abc.abstractmethod
    def click(self):
        pass

# 文件的形态之一:文本文件 
class Text(File):
    def click(self):
        print('open file')

#文件的形态之二:可执行文件
class ExeFile(File):
    def click(self):
        print('execute file')

text = Text()
exefile = ExeFile()

text.click()
exefile.click()
# 结果
'''
open file
execute file
'''

多态性:指具有不同功能的函数可以使用相同的函数名,这样可以用一个函数名调用不同内容的函数(如向不同的对象发送同一条消息,不同的对象接受时会执行不同的行为)。简单来说,就是一种调用方式,产生不同的执行效果。

# 多态性:一种调用方式,不同的执行效果(多态性)
class Animal:
    def run(self):
        raise AttributeError('子类必须实现这个方法')

class People(Animal):
    def run(self):
        print('人正在走')

class Pig(Animal):
    def run(self):
        print('猪正在散步')

class Dog(Animal):
    def run(self):
        print('狗正在走')

people = People()
pig = Pig()
dog = Dog()

# 多态性:定义统一的接口
def func(obj):  # obj这个参数没有类型限制,可以传入不同类型的值
    obj.run()  # 调用的逻辑都一样,执行的结果却不一样

func(people)
func(pig)
func(dog)

# 结果
'''
人正在走
猪正在散步
狗正在走
'''
# 多态性
import abc

# 同一类事物:文件
class File(metaclass=abc.ABCMeta): 
    @abc.abstractmethod
    def click(self):
        pass

# 文件的形态之一:文本文件 
class Text(File):
    def click(self):
        print('open file')

#文件的形态之二:可执行文件
class ExeFile(File):
    def click(self):
        print('execute file')

text = Text()
exefile = ExeFile()

def func(f):
    f.click()

func(text)
func(exefile)

# 结果
'''
open file
execute file
'''

多态性的好处:
- 增加了程序的灵活性
- 增加程序的可扩展性

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值