Python 板


LINE

※ 引述《icetofux ()》之铭言: : test.py : 1 class StateMachine: : 2 def __init__(self): : 3 self.__state = "IDLE" : 4 : 5 def state(self): : 6 return (self.__state) : 7 : 8 sm = StateMachine() : 9 print(sm.state()) : 10 sm.__state = "MOV" : 11 print(sm.state()) Python 的 self.__member 并不会造成这个成员被隐藏, 而是会触发 name mangling: https://en.wikipedia.org/wiki/Name_mangling#Python >>> class Foo: ... def __init__(self): ... self.__member = 'member' ... def get_member(self): ... return self.__member >>> foo = Foo() >>> [attr for attr in dir(foo) if 'member' in attr] ['_Foo__member'] >>> foo._Foo__member 'member' 当你在 instance method 中对 self.__member 赋值时 Python 会改把资料存到 _Foo__member 进而造成 class 外的程式无法用 foo.__member 取值 (但可以用 foo._Foo__member) 当你在 class 外的程式对 foo.__member 赋值, 则并不会触发 name mangling >>> foo.__member = 'outside' >>> [attr for attr in dir(foo) if 'member' in attr] ['_Foo__member', '__member'] >>> foo.__member 'outside' >>> foo._Foo__member 'member' 这两个成员是分开的 当你在 Foo class 里面的 instance method 使用 self.__member 取值时 仍然会触发 name mangling, 进而取到 _Foo__member 注: Python 文件有特别注明这个 mangling 行为只是用来防止继承时的意外覆写 但因为这个 mangling 规则过於 naive, 其实还是很容易出意外 所以一般而言会建议使用 p-member 或完善文件来对付这个问题 而对於你这种 scope management 而言, 更是强烈不建议使用 name mangling -- 作者 Linux (Windows) 看板 C_and_CPP 标题 [问题] 如何确认是否 free 对记忆体 时间 Fri Nov 2 00:14:03 2012
1F:→ akasan:valgrind, 但 windowns 版的没试过XD 11/02 00:43
2F:→ akasan:linux 上那真的是不二选择了 11/02 00:44
3F:→ Linux:我是用 Windows ....>"< 11/02 00:45
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.19.12
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1476416429.A.E14.html
4F:推 Typebrook: 感谢解说,之前看文件都没想到这个地步 10/14 12:46
5F:推 aweimeow: 推 10/14 13:49
※ 编辑: uranusjr (140.112.94.57), 10/14/2016 13:51:16







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP