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 |
댓글