파이썬은 객체지향 언어답게 +, -, * 같은 연산자도 직접 정의할 수 있습니다.
이때 사용하는 것이 바로 **매직 메서드(dunder method)**인데, 그중 대표적인 것이 __add__입니다.
1. + 연산자는 내부적으로 __add__ 호출
class Fruit:
def __init__(self, name, price):
self._name = name
self._price = price
def __add__(self, other):
return self._price + other._price
s1 = Fruit('Orange', 7500)
s2 = Fruit('Banana', 3000)
print(s1 + s2) # 10500
print(s1.__add__(s2)) # 10500 (동일한 동작)
- s1 + s2 → 내부적으로 s1.__add__(s2) 실행
- 만약 __add__가 정의되어 있지 않으면 TypeError 발생
2. 다른 클래스와도 연산 가능하다
s2가 꼭 같은 클래스일 필요는 없습니다.
__add__에서 필요한 속성(여기서는 _price)만 존재하면 동작합니다.
class Drink:
def __init__(self, name, price):
self._name = name
self._price = price
s1 = Fruit('Orange', 7500)
s2 = Drink('Juice', 2500)
print(s1 + s2) # 10000
이처럼 파이썬은 “타입이 같아야 한다”는 제약보다, “필요한 속성이 있으면 된다”는 덕 타이핑(duck typing) 철학을 따릅니다.
“만약 어떤 새가 오리처럼 걷고, 오리처럼 소리를 낸다면, 그건 오리다.”
3. 속성이 없으면 오류 발생
만약 other 객체에 _price 속성이 없다면 에러가 발생합니다.
class Toy:
def __init__(self, name):
self._name = name
t = Toy('Lego')
print(s1 + t) # ❌ AttributeError: 'Toy' object has no attribute '_price'
정리하면
- + 연산자는 내부적으로 __add__ 메서드를 호출한다.
- 두 객체가 꼭 같은 클래스일 필요는 없다. 필요한 속성이 있으면 정상 동작한다.
- 필요한 속성이 없다면 AttributeError가 발생한다.
- 이것이 바로 파이썬의 덕 타이핑 철학: “모양과 행동이 맞으면 된다.”
'파이썬 > 클래스와 객체 지향' 카테고리의 다른 글
| 파이썬에서 상속(Inheritance) vs 구성(Composition) (0) | 2025.09.10 |
|---|---|
| 파이썬 네임스페이스(namespace) 쉽게 이해하기 (0) | 2025.09.10 |
| 파이썬에서 @property와 setter의 올바른 사용법 (0) | 2025.09.06 |
| 추상 클래스 제대로 쓰기: 변수·일반 메서드·super() 재사용 (1) | 2025.09.01 |
| 추상화란 무엇인가?? (0) | 2025.09.01 |