携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情
0 环境
- 编辑器:pycharm或者vscode
- 系统版本:windows10
- python版本:3.9.6
1 继承
类名后面加括号,括号里写要继承的类名即可,其他的照常。
如下代码:我先定义了base类,有定义了One的类,这里的One(Base)就是One继承了Base类。
class Base:
def base_show(self):
print("base_show")
class One(Base):
def one_show(self):
print("one_show")
if __name__ == '__main__':
one = One()
one.one_show()
继承可以重用,可以获得到父类的方法和它的属性,类似孩子继承父母亲的财产和基因等。括号这里的Base正常我们会称为基类或者叫超类。既然One继承了Base这个父类,就叫子类,好比你继承了父的遗产,人家叫你子。结合类,不就是父类和子类了。如下图:子类调用父类的方法,得到结果。
2 继承的规则
现实中人继承是受各种约束的,然而在python也是这样,并不是所有的都能被继承到。比如私有属性是否可以被继承等等。如下代码:
简单定义了Base类,在上面的基础上,加了公有和私有的类变量,以及公有和私有的实例方法,还有公有和私有的类方法,静态方法啥的,可以自行测试,效果是一样的。说白了就是类似父(老子)想留给你的(明面上的,儿子知道的),才是子(儿子)的,父不想给你的(私藏起来),儿子也不知道,就得不到。
class Base:
# 公有类变量
PUB_L_V = "PUBLIC"
# 私有类变量
__PRI_L_V = "PRIVATE"
def __init__(self):
self.public_ins = "public_ins"
self.__private_ins = "private_ins"
# 类变量
@classmethod
def cls_method(cls):
return "cls_method"
@classmethod
def __private_cls_method(cls):
return "__private_cls_method"
# 实例变量
def base_show(self):
print("base_show")
# 私有实例变量
def __private_base_show(self):
print("__private_base_show")
class One(Base):
def one_show(self):
print("one_show")
print(self.PUB_L_V)
当我在子类中,self.私有类变量,然而提示框里是么有该项的。
我打印print(self.__PRI_L_V),会直接报错。公有类变量是么有问题的。
还有公有实例属性也可以,私有的就不行。
可以访问的方法,比如类或是实例方法,其实再加个静态方法也是一样的效果,如下图,也就说明私有的方法,也是无法访问的。
4 总结
继承的总结:子类继承父类,父类传过来是啥,子类继承过来就是啥,不会有变化的。凡公有的,子类都可以继承,凡是私有的,子类都不可以继承。也就说你爸爸想给你的,才是你的,不然没门。