python- 类的多态与多态性

多态

多态指的是一类事物有多种形态——如:动物有多种形态:人、狗、猪。

多态性

  指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性。

静态多态性——任何类型都可以用运算符【+】进行运算。

      eg:字符串+字符串;数字+数字;列表+列表。我们在使用【+】号时也没有考虑类型

动态多态性如下:

# 动态多态性
import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def eat(self):
        pass
    @abc.abstractmethod
    def run(self):
        pass
class Dog(Animal):

    def eat(self):
        print('is eatting' )
    def run(self):
        print('is running')
class Pig(Animal):
    def eat(self):
        print('is eatting')
    def run(self):
        print('is running')

dog1 = Dog()
pig1 = Pig()
dog1.eat()
pig1.eat()

# dog、pig 都是动物,只要是动物都有eat run方法
# 于是我们可以不用考虑它们的具体是什么类型,而直接使用
#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
    obj.eat()

func(dog1)
动态多态性

动态多态性的意思是我们在使用对象的时候不需要考虑类的类型。

多态性的好处:

  1、增加程序的灵活性

      使用者都是同一种形式去调用,如func(obj)

  2、增加了程序的额外可扩展性

    通过Animal类创建了一个新的类,使用者不需要修改自己原有的代码,还是用func(obj)去调用。

import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def eat(self):
        pass
    @abc.abstractmethod
    def run(self):
        pass
    @abc.abstractmethod
    def talk(self):
        pass
class Dog(Animal):

    def eat(self):
        print('is eatting' )
    def run(self):
        print('is running')
    def talk(self):
        print('wawa')
class Pig(Animal):
    def eat(self):
        print('is eatting')
    def run(self):
        print('is running')
    def talk(self):
        print('pipi')
class Cat(Animal):
    def eat(self):
        print('is eatting' )
    def run(self):
        print('is running')
    def talk(self):
        print('maomao')

dog1 = Dog()
pig1 = Pig()
cat1 = Cat()
dog1.eat()
pig1.eat()
cat1.talk()

# dog、pig 都是动物,只要是动物都有eat run方法
# 于是我们可以不用考虑它们的具体是什么类型,而直接使用
#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
    obj.eat()

func(cat1)
创建一个新的了类

鸭子类型

python 崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’

 

转载于:https://www.cnblogs.com/AYxing/p/8999579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值