Python терминология - как называются дополнительные выходы REPL? - PullRequest
0 голосов
/ 07 августа 2020

Рассмотрим следующий код:

class Greet:
    def __init__(self, greeting='Hello'):
        print(greeting)

if __name__ == '__main__':
  print('Initializing and assigning')
  greet = Greet('Shalom!')
  print('Only initializing a class')
  Greet()

Если я запускаю сценарий, я получаю результат:

Initializing and assigning
Shalom!
Only initializing a class
Hello

Однако, допустим, я запускаю приведенный выше код в интерактивном режиме. REPL, взаимодействие выглядит следующим образом:

In 1> greet = Greet('Shalom!')
Shalom!
In 2> Greet()
Hello
<__main__.Greet object at 0x7fac80cc84c0>

Если вы заметили, во втором вводе, т.е. Greet(), я получаю вторую строку, которая, как мне кажется, repr объекта, который приводит к оценка ввода. Как называется этот ДОПОЛНИТЕЛЬНЫЙ выход? Потому что мне кажется, что это причуда самого REPL.

1 Ответ

1 голос
/ 07 августа 2020

Копирование фактического ответа из комментариев выше:

В интерактивной оболочке будут напечатаны любые выражения (не присваивания), оценивающие значение, отличное от None. В скриптах этого не происходит. Вы видите этот вывод в дополнение к фактическим операторам печати. Если бы вы вместо этого поставили greet2 = Greet(), вы бы этого не увидели.

Но отправив этот ответ, чтобы сделать дополнительный комментарий, который не вписывается в формат комментария ... вы вероятно, в любом случае не захочется, чтобы ваш объект выполнял действие при инициализации - лучше поместить это в отдельный метод:

>>> class Greeter:
...     def __init__(self, greeting='Hello'):
...         self.greeting = greeting
...     def greet(self):
...         print(self.greeting)
... 
>>> greeter = Greeter()
>>> greeter.greet()
Hello

Вы не видите никакой дополнительной строки здесь в любом случае, потому что метод greet возвращает None.

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