반응형

파이썬, 클래스에 산술연산자 적용하기

 

글. 수알치 오상문 

 

아래 예제를 살펴보고 실행 결과를 확인하세요. 

참고로 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

 

반응형

+ Recent posts