python笔记 继承

135 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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()

image.png

继承可以重用,可以获得到父类的方法和它的属性,类似孩子继承父母亲的财产和基因等。括号这里的Base正常我们会称为基类或者叫超类。既然One继承了Base这个父类,就叫子类,好比你继承了父的遗产,人家叫你子。结合类,不就是父类和子类了。如下图:子类调用父类的方法,得到结果。 image.png

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.私有类变量,然而提示框里是么有该项的。 image.png

我打印print(self.__PRI_L_V),会直接报错。公有类变量是么有问题的。 image.png

还有公有实例属性也可以,私有的就不行。

image.png

可以访问的方法,比如类或是实例方法,其实再加个静态方法也是一样的效果,如下图,也就说明私有的方法,也是无法访问的。 image.png

4 总结

继承的总结:子类继承父类,父类传过来是啥,子类继承过来就是啥,不会有变化的。凡公有的,子类都可以继承,凡是私有的,子类都不可以继承。也就说你爸爸想给你的,才是你的,不然没门。