python的隐式继承

继承(隐式实例化)

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

class Modle:
    __name = "DNN"

    def __init__(self, name):
        self.__name = name

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


    @classmethod             #类方法不管后面被继承了多少次,它始终绑定在类Modle上
    def print_cls_name(cls):
        print(cls.__name)

class CNNModle(Modle):  # 继承
    __name = "CNN"

    def __init__(self,name):
        self.__name = name


class CNNModleBp(CNNModle):
    __name = "CNNModleBp"


def main():
    cnnmodle = CNNModle("Lenet") # __init__(self, name),self指代cnnmodle,name是Lenet
    cnnmodle.print_name()
    cnnmodle.print_cls_name()    # 这里的name是Modle的name 而不是CNNModle的name
                                 # 否则print的结果应该是CNN,实际打印的是DNN
    cnnmodlebp = CNNModleBp("net")
    cnnmodlebp.print_name()
    cnnmodlebp.print_cls_name()

if __name__ == '__main__':
    main()


注释前输出:

 

注释后输出:

原因:

要点:

    1、如果子类中没有定义自己的__init__()函数,则隐式调用父类的
    2、子类可以使用父类中定义的所有属性和方法,但类方法的行为需要注意

使用了@classmethod后的方法虽然可以继承,但是方法里面的cls参数绑定了父类,即使在子类中调用了类方法,但通过cls引用的属性依旧式父类的类属性 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值