zoukankan      html  css  js  c++  java
  • 五. python面向对象(多态 和metaclass=abc.ABCMeta)

    一. 多态

    多肽: 一种事物的多种形态  叫多肽
    例如 动物(animal)     猫  狗  .......
    # animal.py 文件
    # 动物类 都有名字这个属性 和吃这个方法 class Animal(object): def __init__(self,name): self.name=name def eat(self): print(self.name+"吃1111111111111111")
    # cat.py文件
    # 让定的猫这个属性去继承动这个方法
    from animal import Animal
    
    
    class Cat(Animal):
       def __init__(self, name):
          # self.name=name
          super(Cat, self).__init__(name)
    # def eat()
    # print(self.name+"吃")

    # mouse.py文件
    # 让mouse去继承动物这个类  
    from animal import Animal
    
    class Mouse(Animal):
       def __init__(self,name):
    
          #self.name=name
          super(Mouse,self).__init__(name)
      #def eat():
     
          #print(self.name+"吃")
      
    # person.py文件
    
    class Person (object):
    
        def feedCat(self,cat):
           print("给猫子食物")
           cat.eat()
    
        def feedMouse(self,mouse):
           print("给老鼠食物")
           mouse.eat()
      # mian.py 执行文件
    # 多肽: 一种事物的多种形态  叫多肽
    
    from cat import Cat
    from mouse import Mouse
    from person import Person
    
    # 定义一个人类可以喂任何动物
    tom=Cat("tom")
    # 创建老鼠
    jerry=Mouse("jerry")
    
    tom.eat()
    jerry.eat()
    
    per=Person()
    per.feedCat(tom)
    per.feedCat(jerry)
    
    # tom吃1111111111111111
    # jerry吃1111111111111111
    # 给猫子食物
    # tom吃1111111111111111
    # 给猫子食物
    # jerry吃1111111111111111
    二. import abc   ( metaclass=abc.ABCMeta)
    # 多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。
    # 在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)
    # 。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
    # 上述代码子类是约定俗称的实现这个方法,加上@abc.abstractmethod装饰器后严格控制子类必须实现这个方法
    import abc
    class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
        @abc.abstractmethod                   # 上述代码子类是约定俗称的实现这个方法,加上@abc.abstractmethod装饰器后严格控制子类必须实现这个方法
        def talk(self):
            raise AttributeError('子类必须实现这个方法')
    
    
    class People(Animal):  # 动物的形态之一:人
        def talk(self):
            print('say hello')
    
    
    class Dog(Animal):  # 动物的形态之二:狗
        def talk(self):
            print('say wangwang')
    
    
    class Pig(Animal):  # 动物的形态之三:猪
        def talk(self):
            print('say aoao')
    
    
    peo2 = People()
    pig2 = Pig()
    d2 = Dog()
    
    peo2.talk()
    pig2.talk()
    d2.talk()
    
    
    
     
     
  • 相关阅读:
    利用艺术家的整数ID映射将标签转换为向量
    TOMCATserver不写port号、不写项目名訪问项目、虚拟文件夹配置
    一、奇妙插件Tampermonkey的简单安装教程
    三层登录—c#
    MapReduce中combine、partition、shuffle的作用是什么
    代码混淆防止APP被反编译指南
    数据分析思路的套路攻略
    聊一聊数据分析师这个职业
    Android优化之内存优化倒计时篇
    如何实现360度的手游安全防护?网易云易盾专家分享最新实践
  • 原文地址:https://www.cnblogs.com/Sup-to/p/10879091.html
Copyright © 2011-2022 走看看