2024-05-28 19:44:39 发布
网友
在我看来,除了一点语法上的甜点,property()并没有什么用处
当然,能够编写a.b=2而不是a.setB(2)是很好的,但是隐藏a.b=2不是简单赋值的事实看起来像是一个麻烦的配方,或者是因为可能会发生一些意外的结果,例如a.b=2实际上会导致a.b成为1。或者引发异常。或者是性能问题。或者只是困惑
a.b=2
a.setB(2)
a.b
1
你能给我一个具体的例子来说明它的用途吗?(使用它修补有问题的代码不算数;-)
but hiding the fact that a.b=2 isn't a simple assignment looks like a recipe for trouble
但你并没有隐瞒这个事实;这一事实从一开始就不存在。这就是python——一种高级语言;不是组装。其中很少有“简单”语句可以归结为单CPU指令。把简单性理解到作业中,就是去读那些不存在的东西
当你说x.b=c时,你可能只会想“不管刚刚发生了什么,x.b现在应该是c”
这样做的目的是,在您真正需要getter和setter之前,避免编写getter和setter
所以,首先你要写:
class MyClass(object): def __init__(self): self.myval = 4
显然,您现在可以编写myobj.myval = 5
myobj.myval = 5
但后来,你决定你确实需要一个二传手,因为你想同时做一些聪明的事情。但是你不想改变所有使用你的类的代码,所以你把setter包装在@property装饰器中,它就可以正常工作了
@property
但你并没有隐瞒这个事实;这一事实从一开始就不存在。这就是python——一种高级语言;不是组装。其中很少有“简单”语句可以归结为单CPU指令。把简单性理解到作业中,就是去读那些不存在的东西
当你说x.b=c时,你可能只会想“不管刚刚发生了什么,x.b现在应该是c”
这样做的目的是,在您真正需要getter和setter之前,避免编写getter和setter
所以,首先你要写:
显然,您现在可以编写
myobj.myval = 5
但后来,你决定你确实需要一个二传手,因为你想同时做一些聪明的事情。但是你不想改变所有使用你的类的代码,所以你把setter包装在
@property
装饰器中,它就可以正常工作了相关问题 更多 >
编程相关推荐