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()

  • 相关阅读:
    C# 全局变量
    [C#]续:利用键代码自动转换生成字母键或其它键信息
    [WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)
    [C#]winform窗口托盘
    C# arrayList动态添加对象元素,并取出对象元素的方法
    [WPF](小结3)DataGridInTreeView树嵌表
    [WPF](小结4)TreeView的数据分层模板
    [WPF](小结1)ListBox嵌套ListBox
    [C#]利用键代码自动转换生成字母键或其它键信息
    [C#]使用API 获取设置系统热键和快捷键
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/13021770.html
Copyright © 2011-2022 走看看