파이썬의 컨테이너 객체
컨테이너 객체
컨테이너는 __contains__
메서드를 구현한 객체로, __contains__
메서드는 일반적으로 boolean 값을 반환합니다.
컨테이너 객체가 사용되는 구문은 element in elements
형태의 구문입니다.
위의 코드는 파이썬에서 elements.__contains__(element)
형태로 해석됩니다.
컨테이너 객체 생성 예제
컨테이너 객체를 직접 생성해볼 수 있도록 예제를 하나 만들어보겠습니다.
작성할 예제에는 아래 클래스들이 사용됩니다.
- AmusementPark
- 놀이공원 객체
- 개장시간, 폐장시간 속성을 토대로 __contains__ 함수에서는 특정 시간에 놀이공원이 개장중인지를 반환
- OpeningHours
- 개장 시간 범위에 대한 객체
- AmusementPark의 속성으로 들어가는 객체로, __contains__의 세부 동작 내용 구현을 위임받은 객체
위의 두 가지 클래스는 모두 __contains__ 함수를 포함하고 있는 컨테이너 객체입니다.
class OpeningHours:
def __init__(self, open_at, close_at):
self.open_at = open_at
self.close_at = close_at
def __contains__(self, hour):
return self.open_at <= hour <= self.close_at
class AmusementPark:
def __init__(self, open_at, close_at):
self.open_at = open_at
self.close_at = close_at
self.opening_hours = OpeningHours(self.open_at, self.close_at)
def __contains__(self, hour):
return hour in self.opening_hours
if __name__ == "__main__":
amusement_park = AmusementPark(10, 21)
time_list = [9, 10, 15, 20, 23]
for time in time_list:
print(f"The amusement is open at {time}? - {time in amusement_park}:")
amusement_park 객체를 생성 후에 time_list 내에 있는 시간마다 해당 시간에 amusement_park가 열려있는 상태인지 확인하는 예제입니다.
AmusementPark 객체 내에서 OpeningHours 객체에 __contains__ 함수의 세부 구현 사항을 위임하였습니다.
코드를 실행한 결과는 다음과 같습니다.
10시 ~ 21시까지가 개장 시간이므로 그 외의 시간은 False가 출력되는 것을 확인할 수 있습니다.