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()
    
    
    
     
     
  • 相关阅读:
    【扩展】1. PHP 大括号{} 的使用
    preg_replace 中修正符 e 的解析
    terminal 修改终端显示的名字
    find 命令详解
    OSI 7层结构 粗认识
    vi 全解析
    awk 学习笔记
    scp 复制远程文件 文件带空格 处理
    更新博客地址啦!!!
    ubuntu16.04安装NVIDIA驱动遇到的问题
  • 原文地址:https://www.cnblogs.com/Sup-to/p/10879091.html
Copyright © 2011-2022 走看看