본문 바로가기

컴퓨터/자료구조와 함께 배우는 알고리즘 입문

4. __len__(), __contains__()

1. 클래스에 __len__() 함수를 정의하여 클래스의 인스턴스를 __len__() 함수에 전달할 수 있다.

obj.__len__()함수를 만들어 인스턴스의 리스트의 길이를 반환하는 함수를 만들었다. 하지만 obj.__len__()의 함수와 같은 기능을 하는 len(a)를 통해 인스턴스의 리스트의 길이를 반환하도록 할 수 있다.

class Node:
    def __init__(self, num):
        self.num = num
        self.List = [None] * num
    
    def __len__(self):
        return self.num

    def __contains__(self, target):
        self.count = 0
        for i in range(len(self.List)):
            if self.List[i] is target:
                return True
        
        return False


a = Node(20)
print(a.__len__())
>>> 20

print(len(a))
>>> 20

2. 클래스에 __contains__() 함수를 정의하면 클래스형의 인스턴스에 멤버십 판단 연산자인 in을 적용할 수 있다.

즉, a.__contains__(target)target in a 와 같은 기능을 한다. (단, 반환인자는 bool type이어야 한다.)

class Node:
    def __init__(self, num):
        self.num = num
        self.List = [None] * num
    
    def __len__(self):
        return self.num

    def __contains__(self, target):
        self.count = 0
        for i in range(len(self.List)):
            if self.List[i] == target:
                return True
        
        return False
        
print(a.__contains__(None))
>>> True

print(None in a)
>>> True