2016-10-17 1 views
2

Pythonはメソッドメソッド名にprint(または他の予約語)を使用できませんか?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)がエラーを生成しないであろう。このような制限があると私には驚くべきことです。

#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"); 
} 
+0

C++では、 'printf'は予約語ではありません。 'int'メソッドの名前をつけてみると、C++はそれを許さないが、PythonではPythonで予約語ではないので、Pythonはそれを許していることがわかります。 – user2357112

答えて

4

制限は、印刷が関数へのステートメントから変更されたのPython 3になくなっている:C++や他の言語では、これが問題になることはありません。確かに、あなたは将来のインポートとPythonの2の新しい動作を取得することができます:Pythonのクラスはprintメソッドを定義するためのスタイルノートとして

>>> 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 

を、それは珍しいです。より多くのpythonicはです。返信__str__メソッドの値です。このメソッドは、インスタンスの印刷時の表示方法をカスタマイズします。

>>> class A(object): 
...  def __str__(self): 
...   return "I'm A" 
...  
>>> a = A() 
>>> print(a) 
I'm A 
関連する問題