类的私有属性访问学习分享

1、在类中定义的属性和方法如果不想被公开访问,可以选择隐藏,即为私有属性和私有方法。隐藏的属性和方法只能在类的内部访问。

格式为:名字前面加两个下划线

                __属性

                __方法

2、而在python中没有绝对的隐藏,可以改变一个访问方式就可以进行访问数据。下面有4种方式:

demo1:非正规获取,实际中不要用这种

class People:
    def __init__(self, age):
        self.__age = age

    def __func(self):
        print(f"年龄是{self.__age}岁")


af = People(18)
print(People.__dict__)  # '_People__func': <function People.__func at 0x0000026E60C87C10>
print(af.__dict__)      # {'_People__age': 18}
print(af._People__age)  # 18
af._People__func()      # 年龄是18岁

demo2:定义一个公开方法在类外部调用,以获取私有属性和私有方法。实际中也不要用这种

class People:
    def __init__(self, age):
        self.__age = age  # 私有属性

    def __desc(self):
        print(f"年龄是{self.__age}岁")  # 私有方法

    def get_age(self):
        print(f"属性age:{self.__age}")  # 因为私有属性和私有方法只能在类内部访问,这里定义一个可以外部获取它们的方法
        self.__desc()

    def set_age(self, value):  # 修改私有属性age
        self.__age = value
        print(f"修改age为{self.__age}岁")


af = People(18)
af.get_age()  # 属性age:18  年龄是18岁
af.set_age(30)  # 修改age为30岁

demo3:通过property()函数代理来获取,修改以及删除隐藏的属性。

class People:
    def __init__(self, age):
        self.__age = age  # 私有属性

    def get_age(self):  # 获取私有属性,需要有return值
        return self.__age

    def set_age(self, value):  # 设置(修改)是私有属性,需要有一个参数
        self.__age = value

    def del_age(self):  # 删除私有属性,关键字del
        del self.__age

    age = property(fget=get_age, fset=set_age, fdel=del_age)  # 通过property函数赋值给一个变量(一般同私有属性名)


af = People(18)  # 实例化对象
print(af.age)  # 18 可以直接外部访问age属性
af.age = 30  # 可以外部直接修改age属性
print(af.age)  # 30
del af.age  # 可以外部直接删除age属性
print(af.age)  # 已删除所以会报错

demo4:通过 property装饰器(被装饰的方法名与隐藏属性名一致)。

  •  @property 装饰的方法是获取属性的方法
  •  @属性名.setter 装饰的方法是修改属性值的方法
  •  @属性名.deleter 装饰的方法是删除属性值的方法
class People:
    def __init__(self, age):
        self.__age = age  # 私有属性

    @property
    def age(self):  # 获取私有属性,需要有return值
        return self.__age

    @age.setter
    def age(self, value):  # 设置(修改)是私有属性,需要有一个参数
        self.__age = value

    @age.deleter
    def age(self):  # 删除私有属性,关键字del
        del self.__age


af = People(18)  # 实例化对象
print(af.age)  # 18 可以直接外部访问age属性
af.age = 30  # 可以外部直接修改age属性
print(af.age)  # 30
del af.age  # 可以外部直接删除age属性
print(af.age)  # 已删除所以会报错

如有不足,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值