Python的多态

#!/usr/bin/env python 
# -*- coding:utf-8 -*-

class Modle:
    __name = "DNN"

    def __init__(self, name):     # 只需要传入name
        self.__name = name

    def print_name(self):
        print(self.__name)

    @classmethod
    def print_cls_name(cls):
        print(cls.__name)


class CNNModle(Modle):
    __name = "CNN"

    def __init__(self,name,layer_num):  # 既需要传入name,还需要传入层数layer_num
        Modle.__init__(self,name)       #这行非常关键,没有这行代码就会报错,显式调用的意思
        self.__layer_num = layer_num

    def print_name(self):
        print(self.__name)
        self.print_layer_num()

    def print_layer_num(self):
        print("Layer Num",self.__layer_num)


class RNNModle(Modle):
    __name = "RNN"

    def __init__(self,name,nn_tpye):
        Modle.__init__(self,name) #这行非常关键,没有这行代码就会报错,显式调用的意思
        self.__nn_tpye = nn_tpye

    def print_name(self):
        print(self.__name)
        self.print_nn_tpye()

    def print_nn_tpye(self):
        print("NN tpye:",self.__nn_tpye)


def print_modle(modle):  #多态的实现,传入的是对象
                         #(这里的偏传统,python中真正的多态不要求来自一个继承树)
    modle.print_name()   #.调用传入modle的print_name()函数


def main():
    modle = Modle("DNN")
    cnnmodle = CNNModle("CNN",5)
    rnnmodle = RNNModle("RNN","LSTM")
    [print_modle(m) for m in [modle, cnnmodle, rnnmodle] ]


if __name__ == '__main__':
    main()


输出:

要点:

1、多态的设计就是要完成对不同类型对象使用相同方法调用能得到各自期望的输出

2、在数据封装,继承和多态中,多态是python设计的核心,也叫鸭子类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值