1
levon OP 分不清的名词有类特性, 类属性, 类成员
英文好像分别是attribute, property, member |
2
cute 2012-05-14 16:38:00 +08:00
1. 这里的width和height叫属性,你根本没有定义length属性啊。
2. 这个例子是property的用法. 你就接有没有干嘛啊。 3. property是修饰(decorator)函数:size = property(取值方法 , 赋值方法),当对size做取值操作的时候,执行取值方法,赋值的时候执行赋值方法. |
3
cute 2012-05-14 16:40:36 +08:00
纠正一下property一个type类型
|
4
levon OP |
5
keakon 2012-05-14 16:44:58 +08:00 1
1. 属性。Attribute 和 property 都翻译成属性,在 Python 中,attribute 是真实存在的一个变量,property 可以是一个函数的计算结果。
2. 必要性就是他想教你这个,就写上了。 使用 property 时,你就当成不需要写括号的方法调用就行了。用途就是你的类给别人使用时,比调用方法看上去简便。 比如 article.author.name 就比 article.find_author().full_name() 看上去简便,尽管内部的逻辑都是一样的。 |
6
cute 2012-05-14 16:49:31 +08:00 1
import time
class TestProperty: def __init__(self): self.now = time.time() @property def now_human(self): return time.strftime('%Y-%m-%dT%H:%M:%S', time.gmtime(self.now)) t = TestProperty() print t.now print t.now_human 会使代码变得优雅和方便 |
7
levon OP @cute 我依稀感觉到实用性 ,就是一些简单操作干脆就在类里设计好做成属性。是不是可以这样觉得。那种无需任何操作的就设计成attribute 如你例子中的now
|
8
thedevil7 2012-05-14 17:48:23 +08:00
其实, 我觉得如果说初学, 只要会用, 能写出可以运行, 可以满足需要的代码就可以了吧.. 不需要过分深究, 学到一定程度之后再深入.
|
10
bhuztez 2012-05-14 22:03:19 +08:00
我是吐槽LZ的,碰到一点语法糖,就要个问为什么,我不知道你是在学语言呢,还是学怎么设计语言呢。语法糖这玩意儿,设计语言的人觉得有用就加进去了,你觉得有用就用,你觉得没用就别用,你不用又没人逼你用。前一帖非要用class-based的概念去套prototype-based的python,这帖又要对getter/setter存在的意义进行质疑。你要么干脆什么语法糖都不要,就去用McCarthy论文里提出的原始的Lisp,或者机器码就行了。
另外,Python和优雅真是一点关系都没有。Python自命大巧若拙,其实和那些自以为精巧的语言相比真的好不了多少。 |