具有public getter和private s的Python属性

2024-06-07 01:46:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似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和public getter声明属性?在


Tags: 方法self声明return属性foovaluedef
2条回答

Python没有隐私模型。使用下划线只是惯例,没有访问控制。 如果不希望“public”API包含sett,那么只需从类中删除setter并直接在类代码中赋值给self._persistentMaxInputs.value。如果要限制需要记住这一点的位置数量,可以将其设为函数:

def _setMaxInputs(self, value):
    self._persistentMaxInputs.value = value

当然,可以让它成为一个单独的property对象,但之后您必须放弃decorator语法:

^{pr2}$

但现在至少可以在类代码中使用self._maxInputs = value。然而,这并没有真正提供多少语法改进。在

我使用两个属性来处理公共属性和私有setter。它确实创建了一些多余的代码,但我最终还是遵循了decorator的约定。参见以下示例:

@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

相关问题 更多 >