最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python面向对象三大特性详解3-封装&继承&多态

XAMPP案例 admin 663浏览 0评论
连接第一篇:python面向对象三大特性详解1-封装
连接第二篇:python面向对象三大特性详解2-封装&继承
此为第三篇:python面向对象三大特性详解3-封装&继承&多态
dy31
3
多态
多态指的是一类事物有多种形态,比如说动物有多种形态,猫、狗、羊。

# 猫、狗 都属于动物一类
class Animal:
    pass
class cat(Animal):
    pass
class Dog(Animal):
    pass

多态性指的是在不考虑对象具体类型的情况下直接使用对象,具体来说就是把对象使用的方法统一起来,比如动物都有发出声音的功能,比如下述代码:

class Animal:
    
    def talk(self):
        print('动物会发出的声音...')
        
class Cat(Animal):
    
    def talk(self):
        super().talk()
        print('喵喵')
        
class Dog(Animal):
    
    def talk(self):
        super().talk()
            print('汪汪')
            
# 产生对象
cat = Cat()
dog = Dog()
# 调用方法
cat.talk()
dog.talk()

# 运行结果
动物会发出的声音...
喵喵
动物会发出的声音...
汪汪

多态的本质就是在于不同的类中定义有相同的方法名,可以不考虑类而统一用一种方式去使用对象,python提供了抽象类的概念来硬性限制子类必须有某些方法名。

01
抽象类
使用抽象类需要注意以下几点:
1.在父类中指定指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化;2.但凡继承抽象类的子类都必须遵循抽象类规定的标准,若子类中没有遵循抽象类的标准则会抛出异常TypeError,无法实例化。

import abc  # 使用抽象类必须导入abc包

# 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
class Animal(metaclass=abc.ABCMeta):
    
    @abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
    def talk(self): # 抽象方法中无需实现具体的功能
        pass

class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
    def talk(self):
        pass

cat=Cat() # 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化
02
鸭子类型
不过python更加推崇的是鸭子类型 – 如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子。
比起使用抽象类和继承来硬性规定某种事物一定属于什么类,鸭子类型在某种程度上实现了程序的解耦合,我们只需要在定义类的时候创建出外观和行为相同的对象就可以了,同样可以实现不考虑对象类型而使用对象。

# 像什么就是什么,就具有什么功能

class Cpu:
    def read(self):
        print('cpu read')

    def write(self):
        print('cpu write')

class Memory:
    def read(self):
        print('mem read')

    def write(self):
        print('mem write')
        
obj1=Cpu()
obj2=Mem()

obj1.read()
obj1.write()

obj2.read()
obj2.write()

转载请注明:XAMPP中文组官网 » python面向对象三大特性详解3-封装&继承&多态

您必须 登录 才能发表评论!