gpt4 book ai didi

python - 何时应将属性设为私有(private)并设为只读属性?

转载 作者:IT老高 更新时间:2023-10-28 21:37:37 24 4
gpt4 key购买 nike

我不知道什么时候属性应该是私有(private)的,以及我是否应该使用property

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

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

@property
def x(self):
return self._x

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

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

您的意见和做法是什么?

最佳答案

只要我的两分钱,Silas Ray是在正确的轨道上,但是我想添加一个例子。 ;-)

Python 是一种类型不安全的语言,因此您必须始终信任代码的用户才能像一个合理(明智)的人一样使用代码。

根据 PEP 8 :

Use one leading underscore only for non-public methods and instance variables.

要在类中拥有“只读”属性,您可以使用 @property 装饰,当您这样做时,您需要从 object 继承所以要利用新式的类。

示例:

>>> class A(object):
... def __init__(self, a):
... self._a = a
...
... @property
... def a(self):
... return self._a
...
>>> a = A('test')
>>> a.a
'test'
>>> a.a = 'pleh'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute

关于python - 何时应将属性设为私有(private)并设为只读属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com