【发布时间】:2021-10-27 17:03:21
【问题描述】:
Q1:来自 OO 背景(Java、Ruby、Smalltalk),在 Python 中编写类时,命名访问器和修改器方法的首选方式是什么?例如,如果我有:
class Account :
def __init__(self, owner) :
self.__owner = owner
self.__amount = 0
def owner(self) :
return self.__owner
我应该在属性名称之后调用我的访问器方法,如 owner() 来访问私有属性 __owner,这是 Smalltalk 和 Ruby 等语言中的自定义,或者更确切地说是调用它 get_owner,这将是蛇- case 等价于在 Java 中调用访问器的方式。我认为 Java 方式会更受欢迎?
Q2:对于 mutator 方法的类似问题:我应该将它们称为 set_owner à la Java 还是其他?
Q3:最后一个问题:如果我的属性是公开的,例如:
class Account :
def __init__(self, owner) :
self.owner = owner
self.amount = 0
我是否应该费心为它们编写访问器和修改器方法,因为无论如何我都可以从类外部访问和分配这些属性?
【问题讨论】:
-
改用属性。
-
查看
@property装饰器。 -
不要在 Python 中使用 getter 和 setter。
-
注意,双下划线名称修改并不是真正的私有。单个下划线用于表示不属于公共 API 的属性。 请不要编写样板的 getter 和 setter。
-
“这意味着最好的近似方法可能是使用 Java 风格的命名约定并在课程中的某处添加一个脚注,以便真正的 Pythonistas 会使用装饰器”NO。同样,“真正的 pythonista”的做法是只使用常规属性,即您的
Account类将只是__init__,只有self.owner = owner和self.amount = 0看看this answer I wrote to a related question 解释了“不要写 getter 和 setter”哲学背后的原因。
标签: python naming-conventions smalltalk accessor