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()
    
    
    
     
     
  • 相关阅读:
    C++ Primer 有感(异常处理)(二)
    C++ Primer 有感(异常处理)
    C++ Primer 有感(多重继承与虚继承)
    C++ Primer 有感(面向对象编程)
    C++ Primer 有感(重载操作符)
    yii小部件
    [BAT]通过schtasks.exe远程调用windows 2008 server上的计划任务,提示ERROR : Access is denied
    [BAT]远程执行或停止计划任务
    [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件
    [Jmeter]Xpath获取元素某个属性的值,以及获取最后一个元素某个属性的值
  • 原文地址:https://www.cnblogs.com/Sup-to/p/10879091.html
Copyright © 2011-2022 走看看