python学习笔记Day.7-----------私有变量及其访问,父类与子类

本文探讨Python中的私有变量概念,解释如何通过内部函数访问和修改双下划线开头的私有变量。同时,介绍了父类与子类的关系,包括子类如何覆盖父类的方法以及使用`super()`函数重新调用父类方法的场景。此外,还提到了`mro()`函数在确定方法解析顺序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在定义一个类时,有一些数据我们不希望被外部访问或调用,比如身份证号码或者账户余额等私人信息,就需要我们对信息进行加密,这时就用到了私有变量
所谓私有变量,就是在函数内定义时变量名前面带有双下划线的变量,这种变量不可以被外部调用:

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

这里的__name就不能在主函数中直接print或者做修改动作
那我们怎么访问或者调用它呢?就需要在类内部创建调用它的函数以及调用规则:

    def get_name(self):
        return self.__name

    def __set_name__(self, name):
        if len(name) < 10:
            self.__name = name
        else:
            raise ValueError('名字过长!')

这样就能用get_name得到__name的值了,set__name则可以修改name的值,并对修改时输入的值进行判断,看它是否符合规则,若不符合就会报错

父类与子类:
python中定义一个类时可以规定该类有多个父类,并从父类中继承对应的类属性和方法,这里就出现了一个问题:如果子类和父类中存在相同名字却功能不同的函数怎么办?由于正常情况下我们采用实例对象来进行函数执行,所以默认执行该实例化对象对应的类中的函数,相当于父类函数被 '重写’ 了,如果要调用被重写的父类函数,就用到super()函数

class People:
    def __init__(self):
        self.name = "人"


class Student(People):
    def __init__(self):  # 重写了父类的init方法        
        super().__init__()  # 不调用父类的init,父类的name属性就不会被定义
        self.age = 10

上面这个例子就是重新启用People类中的init()函数,将self.name = ‘人’语句在Student类中执行。

上面说到,一个子类可以有多个父类,所以在继承方法时便会存在先后问题,即在寻找同名方法时到底执行的是哪个父类的函数。可以用mro()函数来查看查找的顺序。

print(C.__mro__)  #可以查看C类的对象搜索方法时的先后顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值