Поведение Python при инициализации класса - PullRequest
0 голосов
/ 16 июня 2019

Я не могу понять, как работает инициализация класса Python, если в одном случае я использую константы, такие как int, и, в другом случае, некоторые выражения, такие как dict comp понимание,

Оба случая связаны с использованием ранее объявленного класса(статические) переменные.

См. фрагмент кода, описывающий проблему:

class Working(object):
  A = 5
  B = A
  # everything is initialized just as expected

class NotWorking(object):
    A = {
      'key': 'value',
    }

    print(f'Print A: {A}')  # {'key': 'value'}

    B = {
        k: A[k] for k in A.keys()
    }
    # Throws "NameError: name 'A' is not defined."

Почему два класса ведут себя по-разному?

1 Ответ

1 голос
/ 17 июня 2019

Если вы пытаетесь клонировать B из A, есть другие способы сделать это. Для нескольких ключей в A объявление для B на самом деле не имеет смысла.

class NowWorking
    A = { 'key': 'value',}
    B = {k:v for k,v in A.items()}

Переменные экземпляра должны быть объявлены в методе __init__. Вот несколько ресурсов, на которые вы можете посмотреть.

Классы и объекты - LearnPython

Hackerearth Notes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...