继承(隐式实例化)
#!/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引用的属性依旧式父类的类属性