python中私有属性和受保护的属性


class People:

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self._protect_var = 10              # 受保护的成员,使用一个下划线_,它仅仅是提示成员受保护,但可以被更改
        self.__private_var = 10             # 使用双下划线__可以定义私有属性

    def sayhi(self):
        print("Hi, my name is {}, and I'm {}".format(self.name, self.age))

    def get_var(self):
        print(self.__private_var)

    def set_var(self, var):
        self.__private_var = var


# class instance 类的实例化

someone = People(name='Jack', age=20)       # 类的实例化
print(someone._protect_var)                 # 10 受保护的成员可以被打印
someone._protect_var = 20                   # 受保护的成员可以被修改
print(someone._protect_var)                 # 20 可以被修改

# print(someone.__private_var)                    # 报错 AttributeError: 'People' object has no attribute '__private_var'
someone.__private_var = 30                   # 此处可以被修改,不会报错(此处表示私有属性可以被修改,具体原因可以百度)
print(someone.__private_var)                 # 可以打印,不会报错

someone.get_var()                           # 10 此处可以发现,__private_var在上面被改成30,但此处打印出来却是10(具体原因可以百度)
someone.set_var(40)
someone.get_var()                           # 40 这里通过someone.set_var(40)改成了40

print(dir(someone))                         # dir()打印出someone这个对象支持的属性和方法
# ['_People__private_var', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__private_var', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_protect_var', 'age', 'get_var', 'name', 'sayhi', 'set_var']
# 在类的内部重命名了 __private_var重命名成_People__private_var

someone._People__private_var = 100
someone.get_var()                           # 100 通过_People__private_var把__private_var的值改成了100

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟寒凌风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值