그러면 [그림2-1]의 함수를 프로그래밍 관점에서 생각해봅시다. 구체적으로는, 앞서 구현한 Variable인스턴슬르 변수로 다룰 수 있는 함수를 Function 클래스로 구현합니다. 여기서 주의할 점은 다음 두 가지입니다.
1) Function 클래스는 Variable인스턴스를 입력받아 Variable인스턴스를 출력합니다.
2) Variable 인스턴스의 실제 데이터는 인스턴스 변수인 data에 있습니다.
이 두 가지에 유의하여 Function 클래스를 다음과 같이 구현 합니다.
class Function:
def __call__(self, input):
x = input.data # 데이터를 꺼낸다.
y = x ** 2 #실제 계산
output = Variable(y) # Variable 형태로 되돌린다.
return output
__call__ 메서드의 인수 input은 Variable 인스턴스라고 가정합니다. 따라서 실제 데이터는 input.data에 존재합니다. 데이터를 커낸 후 원하는 계산(여기서는 제곱)을 하고, 결과를 Variable이라는 '상자'에 담아 돌려 줍니다.
__call__메서드는 파이썬의 특수 메서드입니다. 이 메서드를 정의하면 f = Function()형태로 함수의 인스턴스를 변수 f에 대입해주고, 나중에 f(...)형태로 __call__ 메서드를 호출할 수 있습니다.
댓글 없음:
댓글 쓰기