python中的私有化属性

想记录一下自己学习的过程
这里将记录关于属性私有化

运用场景:

python中属性私有化的运用可以在很多场景中,主要的可分为下面三类:
1.把一个特定的类隐藏起来,不想让外部的类进行直接调用。
2.我想保护这个属性,不想让属性的值随意被改变。
3.保护这个属性,不让派生类【子类】去继承

实现方法:

在需要私有化的属性名前面加上‘__’,也就是双下划线(两个下划线)
具体演示一下:
下面展示一些 内联代码片

// class Person:   
    def __init__(self):
        self.__name = '张三'#加两个下划线,私有化属性 
        self.age = 18
        pass

调用试试:

xz = Person()
print(xz.__name) #在类对象的外部访问

得到的结果是:

AttributeError: 'Person' object has no attribute '__name'

显示了未找到我们已经私有化的属性,当然这是从外部访问。
那再让我们试试从内部访问

 def __str__(self):
        '''
        私有化属性在内部使用
        :return:
        '''
        return '{}的年龄是{}'.format(self.__name,self.age);

这次得到的结果是:

张三的年龄是18

成功了,这说明私有化属性是可以从类的内部访问的,但是不能从类的外部访问

子类继承与私有化属性

承上,我们在继续看一下子类继承父类是否可以继承私有化属性呢?
直接上代码:

lass Person:
    def __init__(self):
        self.__name = '张三'#加两个下划线,私有化属性 类外部不能访问,但内部可以访问
        self.age = 18
        pass
class Studentson(Person):
    pass

调用:

stu = Studentson()
print(stu.__hobby)

结果:

AttributeError: 'Studentson' object has no attribute '__hobby'

可以看出,子类无法从父类继承私有化属性。
但是,这时你可会想,这种调用似乎是‘外部调用’,那么从内部呢?
话不多说,直接上代码试一试:

class Studentson(Person):
    def printinfo(self):
        print(self.name)

    pass


#调用
stu = Studentson()
stu.printinfo()

结果:

AttributeError: 'Studentson' object has no attribute 'name'

这时,我们可以确地得出:子类无法继承父类的私有化属性

小结:

1.私有化的【实例】属性不能再从外部访问,可以在类的内部随意调用
2.子类不能继承父类的私有化属性【只能继承父类的公共属性和行为】
3.属性名前加’__‘就可以完成私有化了

ps:顺带提一下,类属性也具有相似的性质,及其私有化也具有以上的特点,大家可以动手试一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值