多态

# python是一门动态强类型的语言

# 多态:同一个东西,有多种表现形式
    # 在python中,天生支持多态,所以python没有实现多态的一种机制
        # 因为python是一门动态强类型的语言,所以可以进行多态,不同对象可以被参数识别,不用借助父类就可以展现不同形式

class Wechat():
    def pay(self, money):
        print('已经使用微信支付了%s元' % money)

class Alipay():
    def pay(self, money):
        print('已经使用支付宝支付了%s元' % money)

def pay(pay_obj, money):    # 这个函数,传进来wechat对象和alipay对象都可以调用pay,并且表现的形式不一样,这就是多态
    pay_obj.pay(money)

# 在其他强类型语言中,实现多态的效果,需要有个中间的爸爸类来做到多态的柑橘,他们叫多态
# 鸭子类型  多态的感觉在python中使用用鸭子类型就可以达到效果,因为python是一种动态强类型的语言
    # 不崇尚根据继承所得来的相似
    # 而是我只是自己实现我自己的代码就可以了,如果两个类刚好相似,并不产生父类的子类的兄弟关系,而是鸭子类型
    # 比如list和tuple类,其中其实有很多方法都相似,但是python却将这两个类都继承了object,并没有继承自一个共有的方法的类
    # 优点:松耦合(各个东西的关联性不强,删除一个东西不影响其他的,每个相似的类之间都没有互相影响),高内聚
    # 缺点:太随意了,只能靠自觉

# 鸭子类型进一步说明 下面的  len函数传进去一个list对象后,就调用的list类中的len,len函数传进去一个Tuple对象后,就调用的Tuple类中的len,List和Tuple就是鸭子类型
class List:
    def __len__(self):pass

class Tuple:
    def __len__(self):pass

def len(l_t):
    return l_t.__len__()

l = list()
len(l)



# 其实接口类与抽象类在python当中的应用点并不是非常必要
# 在python中不崇尚根据继承来实现两个类相似的部分

 

posted @ 2018-10-02 17:32  _小溢  阅读(146)  评论(0)    收藏  举报