类的私有属性和方法
Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public
,private
关键字来区分私有公有。
Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。
class Test(object): __count = 0 # 私有属性 __count def get_count(self): return self.__count # 类的内部可以使用私有属性 def set_count(self, value): if self.__check_value(value): # 在类的内部调用类的私有方法 self.__class__.__count = value def __check_value(self, value): # 定义类的私有方法 检查参数 if isinstance(value, int): return True a = Test() print(a.get_count()) a.set_count(100) print(a.get_count()) #a.__check_value(10) # 调用私有方法会报错 #print(a.__count) # 直接访问私有属性也会报错
应用场景
对于一些敏感的数据,我们不希望直接被的函数调用,或者不希望草率的直接 object.key = value
来修改,我们可以选择将属性声名为私有的,这样从外部时无法访问该属性的,也就不能修改了,但是依然可以修改属性字典的方法来修改。
# 当然 可以使用 @proprety class Person(object): __name = 'Monkey' def update_name(self, name): self.__name = name def get_name(self): return self.__name p = Person() p.update_name('BlackMonkey') print(p.get_name()) # BlackMonkey print(p.__name) # 报错 AttributeError: 'Person' object has no attribute '__name'
下面在看下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
总结
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“Python 私有属性和私有方法应用场景分析”评论...
更新日志
2024年11月08日
2024年11月08日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]