神剑山庄资源网 Design By www.hcban.com
类的私有属性和方法
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
总结
神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com
暂无Python 私有属性和私有方法应用场景分析的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月19日
2024年11月19日
- 温岚.2001-有点野【阿尔发】【WAV+CUE】
- 房东的猫2018-柔软[科文音像][WAV+CUE]
- 黄乙玲1993-台湾歌古早曲[台湾首版][WAV+CUE]
- 黑鸭子2008-男人女人[首版][WAV+CUE]
- 张佳佳 《FOLK SONG Ⅱ Impromptus OP.23(即兴曲7首)》[320K/MP3][98.71MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[320K/MP3][118.55MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[FLAC/分轨][268.08MB]
- 张信哲.1996-思念【EMI百代】【WAV+CUE】
- 江美琪.2024-圆的?圆的>华纳】【FLAC分轨】
- 许巍.2018-无尽光芒【和雅弘嘉】【WAV+CUE】
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[320K/MP3][65.72MB]
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[FLAC/分轨][378.53MB]
- Fine乐团《废墟游乐》[320K/MP3][105.13MB]
- 万山红.2009-花开原野万山红Vol.1-2【柏菲】2CD【WAV+CUE】
- 曾庆瑜1992-18首中英文经典全集[台湾派森][WAV整轨]