Использование 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.