사용자 정의 콜러블형

매일 공부(ML)·2022년 12월 1일
0

Fluent Python

목록 보기
32/130

객체로서의 함수

일급함수

사용자 정의 콜러블형

파이썬 함수가 실제 객체일 뿐만 아니라, 모든 파이썬 객체가 함수처럼 동작할 수 있게 call()인스턴스 메서드 구현

"""
BingoCage 클래스를 구현한다.
반복 가능 객체를 받아서 한 항목을 담은 객체를 생성하고, 무작위 순으로 내부에 항목들의 리스트를 저장한다.
객체를 호출하면 항목을 하나 꺼낸다.
"""

#bingocall.py:BingoCage 클래스는 뒤섞인 리스트에서 항목을 골라낼 뿐이다.

import random

class BingoCage:

	def __init__(self, items):
    	self._items = list(items)
        random.shuffle(self._items)
        
    def pick(self):
    	try:
        	return self._items.pop()
        expert IndexError:
        	raise LookupError('pick from empty BingoCage')
            
    def __call__(self):
    	return self.pick()

#callable() 내장 함수가 이 객체를 콜러블 객체로 인식하는지 주의하기

bingo = BingoCage(range(3))
bingo.pick()
bingo()
callable(bingo)

BingoCase의 경우 객체를 함수처럼 호출할 때마다 항목을 하나 꺼내서 변경 후 상태를 유지하는 call() 메서드를 구현하면 객체를 생성하기 쉽고, 데커레이터는 함수이긴 하지만 호출된 후의 상태를 '기억'할 수 있는 기능이 유용하게 사용된다.

클로저는 내부 상태를 가진 함수를 전혀 다른 방식으로 생성한다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글