假设我们有一个对象a
并且我们想要修改像这样的结构的数据
a.substruct1.subsubstruct1.name_of_the_data1
还有这个
a.substruct2.subsubstruct2.name_of_the_data2
要访问此结构,我们调用外部方法 get_the_data_shortcut(a)
,该方法经过大量参数化(例如参数 subsstruct
指定要返回哪个子结构)。这看起来非常多余,但所有这些参数都有一个非常好的默认设置,这是有意义的。此外,如果默认分支不可用,此函数将返回另一个数据分支。
如何修改get_the_data_shortcut(a)
?
b = get_the_data_shortcut(a)
b = b + 1
然后,get_the_data_shortcut(a)
保持不变,因为 Python 不是 Java。
我需要二传手吗?大多数情况下,这不是我的代码,而是由编写 Python 代码的人编写的,我正在努力跟上这些标准。
最佳答案
正如您发现的,更改 b 引用的对象不会修改 a 对象(或其子结构)。如果你想这样做,你将需要一个类似于 get_the_data_shortcut(a) 的方法。即一个
set_the_data_shortcut(a, newvalue)
或者,您可以使用一个方法来返回存储值的子结构并对其进行操作。
# returns a.substructure2.subsubstructure2
# or a.substructure1.subsubstructure1 based on the value of kind
substruct = get_the_substructure(a, kind)
substruct.name_of_data1 += 1
关于避免指针的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274917/