类的多态和抽象类

一、多态

多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)

  1. 序列数据类型有多种形态:字符串,列表,元组

  2. 动物有多种形态:人,狗,猪

2.多态的目的:
“多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)。

多态的表现 “形式之一” 就是继承:
- 先抽象,再继承

父类: 定制一套统一的规范。(比如: 方法名统一)
子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一)

注意: 在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了抽象类。

 动物的多种形态

# 动物类
class Animal:

    # 方法 吃
    def eat(self):
        pass

    # 方法 叫
    def speak(self):
        pass
# 猪类
class Pig(Animal):
    def eat(self):
        print('bia唧...')

    def speak(self):
        print('哼哼哼...')


# 猫类
class Cat(Animal):
    def eat(self):
        print('咬ji 咬ji....')

    def speak(self):
        print('喵喵喵...')


# 狗类
class Dog(Animal):
    def eat(self):
        print('舔 ji 舔ji...')

    def speak(self):
        print('汪汪汪...')


animal1 = Dog()
animal2 = Pig()
animal3 = Cat()

# 让动物们叫起来
animal1.speak()
animal2.speak()
animal3.speak()
抽象类
1.什么是抽象类?

在python内置的abc模块中,有一个抽象类。

2.抽象类的作用:
让子类必须遵循父类的编写规范。

3.如何实现抽象类
- 父类需要继承abc模块中,metaclass=abc.ABCMeta
- 在父类的方法中,需要装饰上 abc.abstractmethod


注意: 在python中不推荐使用抽象类。

注意: 子类必须按照父类的方法编写规范,缺一不可。(只要父类中有几个抽象方法,子类就必须要定义几个)
import abc
# 父类
class Animal(metaclass=abc.ABCMeta):
    # 方法 吃
    @abc.abstractmethod
    def eat(self):
        pass

    # 方法 叫
    @abc.abstractmethod
    def speak(self):
        pass


# 猪类
class Pig(Animal):

    def run(self):
        pass

    def eat(self):
        print('bia唧...')

    def speak(self):
        print('哼哼哼...')

print(Pig.__dict__)
print(Animal.__dict__)
pig_obj = Pig()

  

 


posted @ 2019-11-28 18:35  Parado  阅读(673)  评论(0编辑  收藏  举报