假设我们有一个对象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代码的人编写的,我正在努力跟上这些标准。
答案 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