Я не могу выполнить функцию print в классе:

#!/usr/bin/python
import sys

class MyClass:
    def print(self):
        print 'MyClass'

a = MyClass()
a.print()

Я получаю следующую ошибку:

File "./start.py", line 9
    a.print()
          ^
SyntaxError: invalid syntax

Почему это происходит?

4
TigerTV.ru 1 Мар 2018 в 03:18

3 ответа

Лучший ответ

В Python 2 print является ключевым словом. Он может быть использован только по прямому назначению. Я не могу быть именем переменной или функции.

В Python 3 print представляет собой встроенную функцию , а не ключевое слово. Так, например, методы могут иметь имя print.

Если вы используете Python 2 и хотите изменить его поведение по умолчанию, вы можете импортировать поведение Python 3 из __future__ :

from __future__ import print_function
class MyClass:
    def print(self):
        print ('MyClass')

a = MyClass()
a.print()
10
Robᵩ 1 Мар 2018 в 05:39

Я попробовал ваш код на Python 3 так:

class MyClass:
    def print(self):
        print ('MyClass')

a = MyClass()
a.print()

Это сработало !!

Выход:

MyClass

Запуск вашего кода как есть дает мне синтаксическую ошибку. Из-за отсутствия круглых скобок в печати. Также обратите внимание, что print является зарезервированным ключевым словом в Python 2, но является встроенной функцией в Python 3.

2
Ankit Malik 1 Мар 2018 в 00:26

Вы используете Python 2 (что вам действительно не следует, если у вас нет веских причин).

В Python 2 print является оператором, поэтому print на самом деле является зарезервированным словом. Действительно, SyntaxError должен был сгенерирован, когда вы пытались определить функцию с именем print, т.е.

In [1]: class MyClass:
   ...:     def print(self):
   ...:         print 'MyClass'
   ...:
   ...: a = MyClass()
   ...: a.print()
  File "<ipython-input-1-15822827e600>", line 2
    def print(self):
            ^
SyntaxError: invalid syntax

Итак, мне интересно, какую именно версию Python 2 вы используете. вышеупомянутый вывод был из сеанса Python 2.7.13 ...

Итак, обратите внимание, в Python 3:

>>> class A:
...    def print(self):
...       print('A')
...
>>> A().print()
A
8
juanpa.arrivillaga 1 Мар 2018 в 00:21