什么时候属性应该是私有的并成为只读属性?[闭门]

关闭。这个问题是基于意见的。它目前不接受答案。

<hr class=“my12大纲无baw0 bb bc-POWER-400”/

想改进这个问题吗?编辑这篇文章,更新这个问题,以便用事实和引文来回答。

三个月前关闭了

改进这个问题

我不知道属性何时应该是私有的,以及是否应该使用属性

我最近读到setter和getter不是pythonic,但是使用属性装饰器是可以的

但是如果我有一个属性,它不能从类外设置,但可以读取(只读属性)。这个属性应该是私有的吗?我说的私有是指下划线,比如self.\ux
如果是,那么我如何在不使用getter的情况下阅读它?
我现在知道的唯一方法就是写作

@属性
def x(自我):
返回自我

这样,我可以通过obj.x读取属性,但我不能设置它obj.x=1,所以它很好

但我真的应该关心设置不能设置的对象吗?也许我应该离开它。但我不能使用下划线,因为读取obj.\ux对于用户来说很奇怪,所以我应该使用obj.x,然后用户又不知道他不能设置此属性

你的观点和做法是什么

就我的两分钱,塞拉斯·雷走上了正确的道路,但我想添加一个例子。;-)

Python是一种类型不安全的语言,因此您必须始终信任代码的用户,让他们像理性(明智)的人一样使用代码

根据政治公众人物8:

仅对非公共方法和实例变量使用一个前导下划线

若要在类中具有“只读”属性,可以使用@property装饰,在使用新样式的类时,需要从对象继承

示例:

A类(对象):
…定义初始化(self,a):
…自我。_a=a
...
…@财产
…定义a(自我):
…回归自我
...
&gt;&gt;&gt;a=a(‘测试’)
&gt;&gt;&gt;a.a
“测试”
&gt;&gt;&gt;a.a='pleh'
回溯(最近一次呼叫最后一次):
文件“&lt;stdin&gt;“,第1行,在&lt;模块&gt;
AttributeError:无法设置属性

发表评论