【发布时间】:2018-01-26 16:17:53
【问题描述】:
我很好奇在 Python 中为实例方法返回值的推荐方法。如果这是一个相当琐碎的问题,我很抱歉,但我似乎无法在 google/sx/so 上找到正确的答案。
选项 1:
class Cla:
def __init__(self):
self.var = False
def _inst_mtd(self):
var = True
return var
def calc_var(self):
self.var = self._inst_mtd() # or in init if desired
def return_var(self):
return self.var
选项 2:
class Cla:
def __init__(self):
self.var = False
def _inst_mtd(self):
self.var = True
def calc_var(self):
self._inst_mtd()
def return_var(self):
return self.var
选项 3:
class Cla:
def __init__(self):
self.var = False
def _inst_mtd(self):
self.var = True
return self.var
def calc_var(self):
self.var = self._inst_mtd()
def return_var(self):
return self.var
_inst_mtd 的目的是计算self.var 的值。返回self.var 的单独公共方法将向外部调用者提供return 函数。 _inst_mtd 意味着在类中调用,可能在循环中调用,也可能使用公共方法 calc_var,例如,如果运行需要一段时间。
我担心如果_inst_mtd 的全部目的是修改self.var 而不是实际处理另一个名为var 的变量,那么1 可能会导致局部变量和实例变量之间的混淆。对于 2,我的印象是(仅考虑 _inst_mtd)这构成了副作用,应该避免吗?但是 3 似乎没有必要,尽管它确实适用于返回类型注释,尤其是当 _inst_mtd 中的类型(不推荐)或其中的元素发生更改时。
【问题讨论】:
-
免责声明:这是第一次发布在软件工程中,但没有人在那里回复。请务必指出可能的重复项,当我尝试搜索时,我找不到任何谈论这个特定示例的内容。帖子已被删除,以避免重复发布。
-
我 python 你不需要任何
return_var(self)类型的方法。所有类变量都是公共的。 -
我在想
return_var(self)或get_var(self):是给定的! -
选项 3 肯定是错误的,因为您在两个地方更新了
self.var。 -
嗨 mrCarnivore,是的,我知道我们可以简单地执行
Cla.var来检索 var 的值,稍后可能会使用一个接口跟进它,该接口将调用return_var,允许我稍后用其他东西替换self.var?
标签: python coding-style python-3.5