[英]Python property with public getter and private setter
我有一个这样的python属性:
class Foo:
@property
def maxInputs(self):
return self._persistentMaxInputs.value
@maxInputs.setter
def maxInputs(self, value):
self._persistentMaxInputs.value = value
目前,每个人都可以获取和设置maxInputs
的值。
但是,我想让每个人都获得maxInputs
的值,但它应该只设置在Foo
类内部。
那么有没有办法用一个私有的 setter 和一个公共的 getter 来声明一个属性呢?
Python 没有隐私模型 。 使用下划线只是一种惯例,没有访问控制。 如果您不希望“公共”API包含设置,那么只需从您的类中删除setter并直接在类代码中分配self._persistentMaxInputs.value
。 如果要限制需要记住此位置的位置数,可以使其成为一个函数:
def _setMaxInputs(self, value):
self._persistentMaxInputs.value = value
当然,你可以说,一个单独的property
的对象,但你不得不放弃使用修饰语法:
def _maxInputs(self, value):
self._persistentMaxInputs.value = value
_maxInputs = property(None, _maxInputs)
但现在至少你可以在类代码中使用self._maxInputs = value
。 然而,这并没有提供太多的语法改进。
在我有一个带有私有 setter 的公共属性的情况下,我使用了两个属性。 它确实创建了一些冗余代码,但我最终遵循了装饰器的约定。 请参阅下面的示例:
@property
def current_dir(self) -> str:
"""
Gets current directory, analogous to `pwd`
:return: Current working directory
"""
return self._current_dir
@property
def _current_dir(self) -> None:
return self._current_dir
@_current_dir.setter
def _current_dir(self, path:str) -> None:
self._current_dir = path
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.