Python 更新对象状态的成员函数也会返回一个值,这是常规做法吗?

Python 更新对象状态的成员函数也会返回一个值,这是常规做法吗?,python,Python,我有一个关于Python中的return约定的问题。我有一个类,它有一些数据属性,我有几个函数对数据执行一些分析,然后将结果存储为结果属性(请参见下面的简化实现)。由于分析函数主要更新results属性,因此我的问题是return语句的最佳实践是什么。我是否应该避免更新函数内部的类属性(如process1),而只返回数据并使用它来更新results属性(如process2) 谢谢, 卡姆兰 这完全取决于用例 首先,您没有在那里更改类属性。您正在更改实例属性 其次,如果您计划在类的各个实例之间共

我有一个关于Python中的
return
约定的问题。我有一个类,它有一些
数据
属性,我有几个函数对数据执行一些分析,然后将结果存储为
结果
属性(请参见下面的简化实现)。由于分析函数主要更新
results
属性,因此我的问题是
return
语句的最佳实践是什么。我是否应该避免更新函数内部的类属性(如
process1
),而只返回数据并使用它来更新results属性(如
process2

谢谢, 卡姆兰


这完全取决于用例

首先,您没有在那里更改类属性。您正在更改实例属性

其次,如果您计划在类的各个实例之间共享流程的结果,那么您可以使用类变量

第三,如果您询问的是实例变量,那么这取决于设计选择

除此之外,我想这是没有必要的:-

a.results = a.process2()

您只是将分配作为对象本身的一部分。如果需要,可以使用.process2函数来显示结果。

这取决于用例

首先,您没有在那里更改类属性。您正在更改实例属性

其次,如果您计划在类的各个实例之间共享流程的结果,那么您可以使用类变量

第三,如果您询问的是实例变量,那么这取决于设计选择

除此之外,我想这是没有必要的:-

a.results = a.process2()

您只是将分配作为对象本身的一部分。如果需要,您可以使用.process2函数来显示结果。

类中的其他内容是否使用该结果?为什么要这样存储结果?任何需要结果的东西都会触发计算结果的过程吗(之后结果会被缓存)?请尽量让你的标题反映你的实际问题,而不仅仅是这个问题的广泛主题。为此我做了自己的编辑——希望这是一个准确的解释。一般来说,当一个方法在适当的位置改变状态时,Python类型返回
None
。例如,
list.sort()
list.append()
dict.update()
全部返回
None
,因为它们都会改变对象状态。我个人认为更新对象状态的方法应该返回对象本身,以便允许链接这样的“就地”操作。@MartijInputers是,类中的其他函数也使用results属性,这就是我需要缓存它们的原因。类中的其他函数是否使用结果?为什么要这样存储结果?任何需要结果的东西都会触发计算结果的过程吗(之后结果会被缓存)?请尽量让你的标题反映你的实际问题,而不仅仅是这个问题的广泛主题。为此我做了自己的编辑——希望这是一个准确的解释。一般来说,当一个方法在适当的位置改变状态时,Python类型返回
None
。例如,
list.sort()
list.append()
dict.update()
全部返回
None
,因为它们都会改变对象状态。我个人认为更新对象状态的方法应该返回对象本身,以便允许链接这样的“就地”操作。@MartijInputers是,类中的其他函数也使用results属性,这就是我需要缓存它们的原因。