Python 板


LINE

请问一下python 的private到底是怎样呢 粗浅搜寻了一下相关资料 提到 python class 以 __开头宣告的 method会被视作private 不会被override 例如 class A: def __init__(self): print("A") self.__A() def __A(self): print("_A") class B(A): def __A(self): print("_B") b = B() #执行结果 #A #_A 问题来了... 那 __init__ 为什麽就可以被override呢... 谢谢... -- --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.162.41.161
1F:→ EntHeEnd:而且这时候没办法呼叫 b.__A() 会说method不存在 05/19 23:04
※ 编辑: EntHeEnd 来自: 1.162.84.204 (05/19 23:06)
2F:→ EntHeEnd:sorry我刚刚编辑文章好像不小心修到推文... 05/19 23:07
3F:→ EntHeEnd:orz好像用__宣告的 就没办法call 所以b.__A call不了正常 05/19 23:10
4F:→ EntHeEnd:没办法从外面call 05/19 23:11
5F:推 legendmtg:是_开头不是__开头 __开头不是给你拿来自己命名用的 05/19 23:13
6F:→ ya790206:http://ppt.cc/8RhB 05/19 23:15
7F:→ EntHeEnd:喔喔 我看看 谢谢 05/19 23:20
8F:→ EntHeEnd:感谢楼上的连结! 05/19 23:20
9F:→ EntHeEnd:看完之後 我试了 _开头 其实还是能从外面access @@... 05/19 23:35
10F:→ EntHeEnd:__开头 才比较像private... @@ 05/19 23:36
※ 编辑: EntHeEnd 来自: 1.162.48.36 (05/19 23:36)
11F:→ EntHeEnd:但是网页又说 不该用__来标记一个method是private... 05/19 23:38
12F:→ EntHeEnd:说__是用来避免method被override用的... 05/19 23:38
13F:→ EntHeEnd:可是_开头 从class外面还是能够call... 这样...@@... 05/19 23:39
14F:→ EntHeEnd:是说只是标记让programmer知道不该call但是还是能call吗 05/19 23:40
15F:→ EntHeEnd:反而他说不该用来标记private的 __ work起来比较像... 05/19 23:44
※ 编辑: EntHeEnd 来自: 1.162.48.36 (05/19 23:44)
16F:→ EntHeEnd:想要保证一个method只有在该class里面能被call用__宣告会 05/19 23:51
17F:→ EntHeEnd:有什麽问题吗@@... 05/19 23:51
18F:推 ya790206:1. 因为PEP8(Designing for inheritance章节) 2. 用了__ 05/20 00:05
19F:→ ya790206:也只是换个名字,不保证真的是 private。 05/20 00:05
20F:→ EntHeEnd:因为其实还是有办法call吗... 没有"保证"private 05/20 00:11
21F:→ EntHeEnd:所以说虽然有"近似"的效果 但是没有保证 设计目的也不是 05/20 00:13
22F:→ EntHeEnd:这个 所以不要这样用@@? 05/20 00:13
23F:→ birdhackor:python 没有真正的 private, 以单底线开头是"惯例" 05/20 18:17
24F:→ birdhackor:告诉别人这个 function 理论上"不应该"被外面的 call 05/20 18:18
25F:→ birdhackor:但十几上你硬要去 call 是可以的 05/20 18:18
26F:→ birdhackor:双底线开头,不含同时双底线开头结尾,是 class 继承 05/20 18:19
27F:→ birdhackor:时,为了避免被 override 时使用, python 会替你改名 05/20 18:19
28F:→ birdhackor:成 _ClassName__MethodName 以避免被覆盖 05/20 18:20
29F:→ birdhackor:所以表面上看起来外面 call 不到,实际上用改完後的名 05/20 18:21
30F:→ birdhackor:字还是可以 call 05/20 18:21
31F:→ EntHeEnd:了解 谢谢楼上^^ 05/20 22:10
32F:→ mantour:用 _开头命名,是告诉使用者你不该从外面call 05/21 01:33
33F:→ mantour:而不是限制使用者不能从外面call 05/21 01:33







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灯, 水草

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

TOP