2016-10-17 2 views
2

Python은 메서드 이름에 print (또는 다른 예약어)을 사용하지 못하나요? Python에서 클래스 메서드 이름으로 print 사용

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

$ cat a.py

(예 aprint)는 오류가 발생하지 않을 것이다. 그러한 제한이 있다면 그것은 나에게 놀라운 일이다. C++이나 다른 언어에서 이것은 문제가되지 않을 것입니다 :

+0

C++에서'printf'는 예약어가 아닙니다. 'int'라는 이름의 메소드를 사용하면 C++이 그것을 허용하지 않지만 Python은 파이썬에서 예약어가 아니기 때문에 그것을 허용합니다. – user2357112

답변

4

제한 사항은 인쇄가 명령문에서 기능으로 변경되었을 때 파이썬 3에서 사라졌습니다. 사실, 당신은 미래를 가져 오기 파이썬 2의 새로운 동작을 얻을 수 있습니다 : 파이썬 클래스는 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 
관련 문제