【发布时间】:2021-04-06 00:25:28
【问题描述】:
我有一个关于Python编程的正确方式的问题......也许可以有几种不同的意见,但这里是:
假设我有一个具有几个私有属性的类,并且我实现了两个 getter/setter(不是重载 __getattr__ 和 __setattr__,而是采用更“Java-tistic”的风格):
class MyClass:
def __init__(self):
self.__private1 = "Whatever1"
def setPrivate1(self, private1):
if isinstance(private1, str) and (private1.startswith("private")):
self.__private1 = private1
else:
raise AttributeError("Kaputt")
def getPrivate1(self):
return self.__private1
现在让我们说下面几行,在同一个类的另一个方法中,我需要重新设置那个“__private1”的值。由于是同一个类,所以我仍然可以直接访问私有属性 self.__private1。
我的问题是:我应该使用:
self.setPrivate1("privateBlaBlaBla")
或者我应该直接访问:
self.__private1 ="privateBlaBlaBla"
由于我是设置新值的人,我知道所述值(“privateBlaBlaBla”)是正确的(以“private”开头的 str()),因此不会导致系统不一致。另一方面,如果另一个程序员使用我的代码,并且需要更改 self.__private1 属性的功能,他将需要检查所有代码,并查看 __private1 的值是否已在其他地方手动设置。
我的猜测是正确的做法是始终使用 setPrivate1 方法,并且只在 get/set 中直接访问 __private1 变量,但我想知道更有经验的 Python 程序员的意见。
【问题讨论】:
-
__名称重整使得这不能很好地工作。
标签: python oop private-members