본문 바로가기
Python Object-oriented Programming

__bool__ Method

by 자동매매 2023. 4. 3.

 

Introduction to the Python __bool__ method

 

사용자 지정 클래스의 개체는 부울 값과 연결됩니다. 기본적으로 True로 평가됩니다. 예를 들어:

 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
    person = Person('John', 25)
    print(bool(person))         # True

  예제에서는 Person 클래스를 정의하고, 개체를 인스턴스화하고, 해당 부울 값을 표시합니다. 예상대로 person 개체는 True입니다.

 

기본 동작을 재정의하려면 __bool__ 특수 메서드를 구현합니다. __bool__ 메서드는 부울 (True 또는 False) 반환해야 합니다.

 

예를 들어 사람의 나이가 18 미만이거나 65 이상인 경우 개체 개체가 False 반환한다고 가정합니다.

 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __bool__(self):
        if self.age < 18 or self.age > 65:
            return False
        return True


if __name__ == '__main__':
    person = Person('Jane', 16)
    print(bool(person))  # False

 

The __len__ method

 

사용자 지정 클래스에 __bool__ 메서드가 없는 경우 Python __len__() 메서드를 찾습니다.

__len__ 0이면 개체는 False입니다. 그렇지 않으면 True입니다. 

클래스가 __bool__ __len__ 메서드를 구현하지 않으면 클래스의 개체가 True 평가됩니다.

 

다음은 __bool__ 구현하지 않고 __len__ 메서드를 구현하는 Payroll 클래스를 정의합니다.

class Payroll:
    def __init__(self, length):
        self.length = length

    def __len__(self):
        print('len was called...')
        return self.length


if __name__ == '__main__':
    payroll = Payroll(0)
    print(bool(payroll))  # False

    payroll.length = 10
    print(bool(payroll))  # True

 

Payroll 클래스는 __bool__ 메서드를 재정의하지 않으므로 Python Payroll 개체를 부울 값으로 평가할 __len__ 메서드를 찾습니다.

 

In the following example payroll’s __len__ returns 0, which is False:

payroll = Payroll(0)
print(bool(payroll))  # False

However, the following example __len__ returns 10 which is True:

payroll.length = 10
print(bool(payroll))  # True

 

Summary

  • 사용자 지정 클래스의 모든 개체는 기본적으로 True 반환합니다.
  • __bool__ 메서드를 override(재정의)하여 기본값을 재정의 가능합니다. __bool__ 메서드는 True 또는 False 반환해야 합니다.
  • 클래스가 __bool__ 메서드를 구현하지 않으면 Python __len__ 메서드의 결과를 사용합니다.( 0: False, 그외: True )
    클래스가 메서드를 모두 구현하지 않으면 개체는 기본적으로 True 됩니다.
 

'Python Object-oriented Programming' 카테고리의 다른 글

__del__ Method  (0) 2023.04.04
Dependency Inversion Principle  (0) 2023.04.04
__hash__ Method  (0) 2023.04.03
__eq__ Method  (0) 2023.04.03
__repr__ Method  (0) 2023.04.03

댓글