ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python中私有属性和受保护的属性(转)

2021-09-12 20:32:50  阅读:252  来源: 互联网

标签:__ someone name python self private 私有 var 属性


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

原文链接:https://blog.csdn.net/sehanlingfeng/article/details/92245538

标签:__,someone,name,python,self,private,私有,var,属性
来源: https://www.cnblogs.com/tahitimoon/p/15259957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有