Pythonic避免指针的方法

时间:2015-08-28 15:44:38

标签: python pointers coding-style

假设我们有一个对象a,我们想要修改像这样的结构的数据

a.substructure1.subsubstructure1.name_of_the_data1

和这个

a.substructure2.subsubstructure2.name_of_the_data2

要访问此结构,我们调用一个重度参数化的外部方法get_the_data_shortcut(a)(例如参数subsstructure指定要返回的子结构)。这似乎非常冗余,但是对于所有这些参数都有一个非常好的默认设置是有意义的。此外,如果默认分支不可用,此函数将返回另一个数据分支。

如何修改get_the_data_shortcut(a)

b = get_the_data_shortcut(a)
b = b + 1

然后,get_the_data_shortcut(a)没有改变,因为Python不是Java。

我需要一个二传手吗?大多数情况下,这不是我的代码,也是编写pythonic代码的人编写的,我正在努力跟上这些标准。

2 个答案:

答案 0 :(得分:1)

Python使用引用类型,就像java一样。 但是,当你这样做时

b = b + 1

您没有更新您拥有的对象。相反,您正在创建一个新对象并将其分配给变量b

如果要更新数据结构中b的值,则应遵循建议并为数据结构编写setter。

答案 1 :(得分:1)

当您发现更改对象时,b指的是不会修改对象(或其子结构)。如果你想这样做,你需要一个类似于你的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