3

Pythonprintはクラスメソッド名での使用(または他の予約語)を禁止していますか?

$ 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");
}
4

2 に答える 2

5

print がステートメントから関数に変更されたとき、この制限は Python 3 でなくなりました。実際、将来のインポートで 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

printスタイル ノートとして、Python クラスがメソッドを定義するのは珍しいことです。さらに Pythonic は、メソッドから値を返す__str__ことです。これは、印刷時にインスタンスがどのように表示されるかをカスタマイズします。

>>> class A(object):
...     def __str__(self):
...         return "I'm A"
...     
>>> a = A()
>>> print(a)
I'm A
于 2016-10-17T22:25:05.373 に答える
0

printは Python 2.x の予約語であるため、識別子として使用することはできません。Python の予約語のリストは次のとおりです: https://docs.python.org/2.5/ref/keywords.html

于 2016-10-17T22:26:46.250 に答える