为了更好地格式化我的代码以避免多个方法中的冗余,为不同的类做同样的事情,我遇到了以下问题:
# 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()
请参阅为什么函数可以修改调用者感知的某些参数,而不能修改其他参数? 以解释为什么在a
中重新分配c
不会更新obj.c
。
如果要将对对象属性的引用传递给函数,则必须将其传递给两件事:
- 对象
- 属性的名称(即字符串)
然后,您可以从函数内部动态设置该属性:
def a(self, b, name_of_c):
result = test(b)
if result:
setattr(self, name_of_c, None)
obj.a(obj.b, 'c')
在 def 例程结束时,将 'c' 分配给自身,
执行代码时不会有任何区别, 由于它是在返回后宣布的... 这将得到 摆脱烦人的警告。 而且很简单 了解将来复习时的情况
def a(self, b, c): 结果 = 测试(b) 如果(结果): c = 无 # <- 局部变量 c 被赋值但从未使用 返回
#This 永远不会运行,因为它是在返回之后 #but 它会摆脱烦人的分配,但 #never 使用的警告 c = c