Python 板


LINE

※ 引述《kentyeh (kent)》之铭言: : 最近在学习Python,碰到 setter 与 getter override的困扰 : 首先以下是 Parent 的设定 : class Parent(): : @property : def foo(self): : return self._bar : @foo.setter : def foo(self, foo): : self._bar = foo : 然後是继承者Child : class Child(Parent): : def getFoo(self): : return "Overrides:"+super().foo : def setFoo(self, foo): : self._bar = ' '.join(['Child\'s foo:', foo]) : foo=property(getFoo,setFoo) : 用以下程式测试 : child = Child() : child.foo="Hello World" : print(child.foo) : 取得预期的结果: : Overrides:Child's foo: Hello World : 以下只Override setter : class Child(Parent): : @Parent.foo.setter : def foo(self, foo): : self._bar = ' '.join(['Child\'s foo:', foo]) : 或是只Override getter : class Child(Parent): : @Parent.foo.getter : def foo(self): : return "Override getter:"+self._bar : 也都可以得到预期的结果 : 但是组合起来後 : class Child(Parent): : @Parent.foo.getter : def foo(self): : return "Override getter:"+self._bar : @Parent.foo.setter : def foo(self, foo): : self._bar = ' '.join(['Child\'s foo:', foo]) : 却只得到 : Child's foo: Hello World : 有先进可以解惑吗? 首先来个线上跑扣页面 http://goo.gl/0G1JFE 重点已经注解在扣里面了,搭配测试结果应该很容易了解。 其实需要知道的只是 decorator 不过是一种 syntactic sugar,下面这两段扣 意思是一样的。 #1 @property def foo(self): return self._foo #2 def foo(self): return self._foo foo = property(foo) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 98.234.217.60
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1439966089.A.3D4.html
1F:推 kentyeh: 辛苦了,但仍不理解为什麽但Child2的setter置换後会连同 08/19 17:23
2F:→ kentyeh: getter一起换掉,而Child1却不会? 08/19 17:24
3F:→ tytyty: 因为decorator的来源不一样,Child1的setter用的是Parent 08/19 23:52
4F:→ tytyty: 里的foo property,Child2当要decorate setter时把自己的 08/19 23:53
5F:→ tytyty: foo property拿来用,所以不会把置换过的getter丢掉。 08/19 23:54







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

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

TOP