Использование print в качестве имени метода класса в Python

Запрещает ли Python использовать print (или другие зарезервированные слова) в имени метода класса?

$ cat a.py

import sys
class A:
    def print(self):
        sys.stdout.write("I'm A\n")
a = A()
a.print()

$ python a.py

File "a.py", line 3
  def print(self):
          ^
  SyntaxError: invalid syntax

+ Изменить print на другое имя (например, aprint) не выдаст ошибку. Мне удивительно, если есть такое ограничение. В C++ или других языках это не будет проблемой:

#include<iostream>
#include<string>
using namespace std;

class A {
  public:
    void printf(string s)
    {
      cout << s << endl;
    }
};


int main()
{
  A a;
  a.printf("I'm A");
}

2 ответа

Решение

Ограничение исчезло в Python 3, когда print был изменен с оператора на функцию. Действительно, вы можете получить новое поведение в Python 2 с последующим импортом:

>>> from __future__ import print_function
>>> import sys
>>> class A(object):
...     def print(self):
...         sys.stdout.write("I'm A\n")
...     
>>> a = A()
>>> a.print()
I'm A

Как примечание стиля, для класса python необычно определять print метод. Более питоническим является возвращение значения из __str__ метод, который настраивает способ отображения экземпляра при его печати.

>>> class A(object):
...     def __str__(self):
...         return "I'm A"
...     
>>> a = A()
>>> print(a)
I'm A

print - зарезервированное слово в Python 2.x, поэтому его нельзя использовать в качестве идентификатора. Вот список зарезервированных слов в Python: https://docs.python.org/2.5/ref/keywords.html.

Другие вопросы по тегам