• day10_修改父类的构造方法(不重要)和鸭子类型


    当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子
    在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。

    class Duck():
    def walk(self):
    print('I walk like a duck')

    def swim(self):
    print('I swim like a duck')


    class Person():
    def walk(self):
    print('This one walk like a duck')

    def swim(self):
    print('This man swim like a duck')


    def watch_duck(animal): # animal叫别的名字也可以,在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。
    animal.walk() # 只有walk方法,只调用类中的walk方法
    animal.swim() # 只有swim方法,只调用类中的swim方法

    small_duck = Duck()
    watch_duck(small_duck)

    duck_like_man = Person()
    watch_duck(duck_like_man)


    class Lame_Foot_Duck():
    def swim(self):
    print('I am lame but i can swim')


    lame_duck = Lame_Foot_Duck()
    watch_duck(lame_duck) # watch_duck函数接收这个类的对象,然后并没有检查对象的类型,而是直接调用这个对象的走和游的方法,如果所需要的方法不存在就报错(类中没有walk方法,所以报错)

    
    

    父类的构造方法,满足不了你现有的功能,你要在父类构造方法的基础上,添加新的功能

    class AxFather(object):
    def __init__(self, op):
    print('这个是父类里面的op:', op)

    def make_money(self):
    print('今天挣了100万')


    class Ax(AxFather):
    def __init__(self, op, code):
    AxFather.__init__(self, op) # 把原来的调用一下,有父类的功能,方法一,如果想修改父类的构造方法,那么先调用一下父类的构造方法
    super(Ax, self).__init__(op) # super会自动帮你找到父类,方法二,这个和上面的写法是一样的,不一样的是super里传的是本类,而不是父类
    print('这个是Ax类里面的code:', code)

    def make_money(self):
    print('今天挣了290万')


    Ax('吃饭', '喝水')

    分别打印如下:
    这个是父类里面的op: 吃饭
    这个是Ax类里面的code: 喝水

     

    python里面是不支持多态的

    class My(object):
    def make(name):
    print(name)

    def make(name, age):
    print(name, age)

    def make():
    print('哈哈')

    java里是通过多个make方法,通过不同的形参来实现多态
    功能比较简单的情况下,定义个函数就行,功能比较复杂的就用类,更好些

  • 相关阅读:
    Java构造和解析Json数据的两种方法详解一
    使用json-lib进行Java和JSON之间的转换
    java 读取文件转换成字符串
    Jackson 框架,轻易转换JSON
    (转载)最黑的黑客米特尼克:多次耍FBI 终被高手擒
    (转载)Linux下IPTABLES防火墙的设定
    (转载)Linux下IPTABLES配置详解
    (转载)Linux上iptables防火墙的基本应用教程
    (转载)更好的重启nginx 服务器
    (转载)JavaScript中的Window窗口对象
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8591856.html
Copyright © 2020-2023  润新知