파이썬, 클래스에 산술연산자 적용하기
파이썬, 클래스에 산술연산자 적용하기
글. 수알치 오상문
아래 예제를 살펴보고 실행 결과를 확인하세요.
참고로 Python 3 기준입니다.
class Dog:
def __init__(self, count=0.0):
if isinstance(count, (int, float)):
self.dog_cnt = float(count)
else:
raise ValueError("Count should be a number")
def get_dog_cnt(self):
return self.dog_cnt
def __add__(self, x): # dog + x
self.dog_cnt += x
return self.dog_cnt
def __radd__(self, x): # x + dog
return self.__add__(x)
def __sub__(self, x): # dog - x
self.dog_cnt -= x
return self.dog_cnt
def __rsub__(self, x): # x - dog
return self.__sub__(x)
def __mul__(self, x): # dog * x
self.dog_cnt *= x
return self.dog_cnt
def __rmul__(self, x): # x * dog
return self.__mul__(x)
def __truediv__(self, x): # dog / x
if x != 0 and x != 0.0:
self.dog_cnt /= x
return self.dog_cnt
else:
return self.dog_cnt
def __rtruediv__(self, x): # x // dog
return self.__truediv__(x)
def __floordiv__(self, x): # dog / x
if x != 0 and x != 0.0:
self.dog_cnt //= x
return float(self.dog_cnt)
else:
return self.dog_cnt
def __rfloordiv__(self, x): # x / dog
return self.__truediv__(x)
dog = Dog()
print(dog.get_dog_cnt()) # 0
print(dog + 5) # 5
print(dog * 2) # 10
print(1 * dog) # 10
print(dog // 2) # 5
print(dog / 2) # 2.5
print(dog - 10) # 0
print(1 + dog) # 1
print(dog - dog) # 0.0
print(dog + 10) # 10.0
print(dog // 0) # 10.0
print(dog / dog) # 1.0