为了更好地格式化我的代码以避免在针对不同类执行相同操作的多个方法中出现冗余,我面临以下问题:
# problematic method
def a(self, b, c):
result = test(b)
if (result):
c = None # <- local variable c is assigned but never used
return
# main code
obj.a(obj.b, obj.c)
并且obj的变量c永远不会设置为None。
我正在尝试重新格式化的当前工作代码如下:
# working method
def a(self):
result = test(self.b)
if (result):
self.c = None
return
# main code
obj.a()
答案 0 :(得分:1)
请参见Why can a function modify some arguments as perceived by the caller, but not others?来解释为什么在c
中重新分配a
不会更新obj.c
。
如果要将对对象属性的引用传递给函数,则必须向其传递两件事:
然后您可以在函数内部dynamically set that attribute:
def a(self, b, name_of_c):
result = test(b)
if result:
setattr(self, name_of_c, None)
obj.a(obj.b, 'c')