Python - локальная переменная назначена, но никогда не используется - var = None - PullRequest
0 голосов
/ 02 ноября 2018

В попытке немного лучше отформатировать мой код, чтобы избежать избыточности в нескольких методах, выполняющих одинаковые вещи для разных классов, я столкнулся со следующей проблемой:

# 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)

И переменная объекта c никогда не устанавливается в None.

Текущий рабочий код, который я пытаюсь переформатировать, выглядит следующим образом:

# working method
def a(self):
   result = test(self.b)
   if (result):
       self.c = None
   return

# main code
obj.a()

1 Ответ

0 голосов
/ 02 ноября 2018

См. Почему функция может изменять некоторые аргументы, воспринимаемые вызывающей стороной, но не другие? для объяснения, почему переназначение c в a не обновляет obj.c.

Если вы хотите передать ссылку на атрибут объекта в функцию, вы должны передать ей две вещи:

  1. объект
  2. имя атрибута (то есть строка)

Затем вы можете динамически установить этот атрибут внутри функции:

def a(self, b, name_of_c):
    result = test(b)
    if result:
        setattr(self, name_of_c, None)

obj.a(obj.b, 'c')
...