zoukankan      html  css  js  c++  java
  • python--多态和两个练习题

    多态

    一种接口,多种实现

    最初我们写类是这样调用的

    class Animal(object):
        def __init__(self, name):
            self.name = name
    
        def talk(self):
            pass
    
    
    class Cat(Animal):
        def talk(self):
            print('Meow!')
    
    
    class Dog(Animal):
        def talk(self):
            print('Woof! Woof!')
    
    
    d = Dog("杰克")
    d.talk()
    c = Cat("叶良辰")
    c.talk()

    结果:

    Woof! Woof!
    Meow!

    这样也是一种多态

    class Animal(object):
        def __init__(self, name):
            self.name = name
    
        def talk(self):
            pass
    
    
    class Cat(Animal):
        def talk(self):
            print('Meow!')
    
    
    class Dog(Animal):
        def talk(self):
            print('Woof! Woof!')
    
    
    def animal_talk(obj):
        obj.talk()
    
    
    d = Dog("杰克")
    c = Cat("叶良辰")
    animal_talk(c)
    animal_talk(d)

    结果:

    Meow!
    Woof! Woof!

    最终的多态

    class Animal(object):
        def __init__(self, name):
            self.name = name
    
        def talk(self):
            pass
    
    
        @staticmethod  # 静态方法
        def animal_talk(obj):  # 静态方法下这里不需要self
            obj.talk()
    
    
    class Cat(Animal):
        def talk(self):
            print('Meow!')
    
    
    class Dog(Animal):
        def talk(self):
            print('Woof! Woof!')
    
    
    d = Dog("杰克")
    c = Cat("叶良辰")
    Animal.animal_talk(c)  # 调用了Animal下的    animal_talk方法,将c传给,animal_talk又调用了Dog下的talk(),相当于c.talk()
    Animal.animal_talk(d)

    结果:

    Meow!
    Woof! Woof!

    练习题

    class Parent():
    
        def func(self):
            print("in parent func")
    
        def __init__(self):
            self.func()
    
    
    class Son(Parent):
        def func(self):
            print("in son func")
    
    
    s = Son()

    结果:

    in son func
    点击查看

    执行Son()先执行__init__方法,Son类中没有,然后在他的父类中找,父类中有,执行self.func(),这时候self是Son()本身,所以执行Son方法下的func方法

    class Parent():
    
        def __func(self):
            print("in parent func")
    
        def __init__(self):
            self.__func()
    
    
    class Son(Parent):
        def __func(self):
            print("in son func")
    
    
    s = Son()

    结果:

    in parent func
    点击查看结果

    类执行的时候,遇到__xx的时候,会在前面加上_类名__xx,所以遇到self.__func()的时候,为self._Paernt__func()

  • 相关阅读:
    STM32F407 窗口看门狗 个人笔记
    Hadoop技巧系列索引
    从零自学Hadoop系列索引
    从零自学Hadoop(25):Impala相关操作下
    从零自学Hadoop(24):Impala相关操作上
    从零自学Hadoop(23):Impala介绍及安装
    Hadoop技巧(04):简易处理solr date 时区问题
    从零自学Hadoop(22):HBase协处理器
    从零自学Hadoop(21):HBase数据模型相关操作下
    从零自学Hadoop(20):HBase数据模型相关操作上
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/13021770.html
Copyright © 2011-2022 走看看