Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  "__init__" 과 "__call__"에 대한 이해 
작성일시 : 2020. 4. 18. 12:48 | 분류 : Development/Python

여러분이 아시는것과 같이 Python에서는 함수를 First Class 오브젝트로 취급합니다. 이는 함수가 다른 함수의 파라메터로 사용될 수 있다는 의미 이며, 또한 해당 함수 내에서 실행도 가능하는 것을 의미 합니다.

이와 마찮가지로 클래스의 인스턴스 또한 함수로 취급될 수 있는데, 이는 다른 함수의 파라메터가 될 수 있는 것을 의미하죠. 이 경우에 우리는 __call__ 함수가 필요하게 됩니다. 예를 들어 Class A가 있고, 인스턴스로 a를 선언 했습니다. 여기에 __call__(x, y) 함수가 선언되어 있다면, 이 함수를 호출 하는 경우 우리는 x.__call__(x, y)를 사용할 수 도 있지만 x(x, y)도 가능 합니다.

 

파이썬에서 __init__()는 클래스의 생성자 역할을 하고 있습니다. (마찮가지로 __del__()는 종료자 역할을 제공함) 이후 클래스를 함수로써 호출 가능하게 활용하기위하여 사용하는 특수한 메소드가 바로 __call__() 이 됩니다. 그리고 우리는 __call__ 함수를 이용하여 객체의 생성 및 종료와 관계 없이 객체의 내부 상태를 변경 할 수 있습니다.

class Stuff(object):

    def __init__(self, x, y, range):
        super(Stuff, self).__init__()
        self.x = x
        self.y = y
        self.range = range

    def __call__(self, x, y):
        self.x = x
        self.y = y
        print '__call__ with (%d,%d)' % (self.x, self.y)

    def __del__(self):
        del self.x
        del self.y
        del self.range

>>> s = Stuff(1, 2, 3)
>>> s.x
1
>>> s(7, 8)
__call__ with (7,8)
>>> s.x
7

출처: https://stackoverflow.com/questions/9663562/what-is-the-difference-between-init-and-call

|