2014-03-14 1 views
1

현재 개행을 기다리지 않고 명령 행에서 단일 문자를 읽는 작업을하고 있습니다. 도움이되는 답변 here을 찾았으며 소스 here을 따라갔습니다. 나는 약간의 코드를 수정하고, 지금은 다음과 같습니다변수를 함수로 변환 하시겠습니까? (코드 작동, 흥미로운 동작)

import sys,tty,termios 
class _Getch:  
    def __call__(self): 
      fd = sys.stdin.fileno() 
      old_settings = termios.tcgetattr(fd) 
      try: 
       tty.setraw(sys.stdin.fileno()) 
       ch = sys.stdin.read(1) 
      finally: 
       termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) 
      return ch 

def main(): 
    inkey = _Getch() 
    while(1): 
     k=inkey() 
     if k!='':break 
    print 'you pressed', k 

여기 나에게 흥미있는 inkey()입니다 부분입니다. 나는 k=inkey 또는 k=_Getch 등으로 수정하려고 시도했지만, 그럴 의도로 작동하지 않습니다. 내가 말할 수있는 한, 이전에 inkey() 메서드가 정의되지 않았으므로, 변수 inkey=_Getch()이 어떻게 든 함수로 사용되는 것처럼 보입니다.

여기에 무슨 일이 일어나고 있는지 이해할 수 없습니다. 이것이 어떻게 가능한지? 사용되는 기본 메커니즘은 무엇입니까? 누군가가 이것에 관해 밝힐 수 있다면 기쁠 것입니다.

답변

1

_Getch은 클래스이고, inkey은 클래스의 인스턴스입니다. 그것은 기능이 아닙니다.

class A: 
    pass 

a = A() # instantiate an object of class A 

반드시 python docs을 읽어야합니다.

+0

실제로 모든 것이 완벽하게 명확 해집니다. 감사! – Newb

관련 문제