• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

클래스 가격비교 기능 질문

19.12.18 11:32 작성 조회수 187

1

클래스 안에 가격비교를 위한 메서드를 다음과 같이 만들어 주셨는데요,

class Fishmaker:

나머지 생략

def_lt_(self, other):

          return self.price< other.price

클래스 밖에서 구현할 때.

fish1 = Fishmaker()  # price = 100이 기본값

fish2 = Fishmaker(price = 500)

def_lt_(self, other):

          return self.price< other.price

1. 여기서 self.price는 기본값으로 설정한객체의 price를 뜻하고,

2. other.price는  클래스 생성자의 parameter를 통해서

변경시켜준 price를 반영하는 객체를 뜻하는 것인가요??

이 부분이 잘 와닿지 않네요..

감사합니다.

답변 1

답변을 작성해보세요.

0

class FishMaker:
    def __init__(self, price=100):
        self.price = price
    def __lt__(self, other):
        return self.price < other.price

만약에 FishMaker가 위와 같은 코드라고 가정하겠습니다.

그리고 말씀하신 예제의 상황처럼

fish1 = FishMaker()
fish2 = FishMaker(price=500)

위와 같이 price=100 인 fish1 과 price가 500인 fish2 클래스 객체가 2개 선언되었다고 했을때

이렇게 2개의 객체를 < 연산자를 통해서 비교가 가능하게 하기 위해 __lt__() 함수를 구현했고

price 변수로 2개 객체의 값을 비교하라고 구현한것 뿐입니다.

위와 같이 __lt__() 함수를 구현하지 않으면 객체와 객체를 연산자 (<) 를 통해서 비교도 할 수 없고

__lt__() 함수를 통해 < 연산자를 비교 가능하게 했다면 두 객체사이에 어떤 값을 비교하게 할지를 설정해야 합니다.

그리고 __lt__(self, other) 이렇게 other 로 선언된 변수는

class FishMaker:
    def __init__(self, price=100):
        self.price = price
    def __lt__(self, other):
        print("셀프: {}", self.price)
        print("아더: {}", other.price)
        return self.price < other.price

fish1 = FishMaker()
fish2 = FishMaker(price=200)

if fish1 < fish2:
    print("fish2가 큼")

위의 코드처럼 __lt__() 함수 내부에서 self.price 와 other.price를 각각 프린트 해보면

if fish1 < fish2 같은 상황에서 에서 fish2가 fish1 내부의 __lt__(self, other) 의 other로 넘어가서 비교가 되게 됩니다.

사실 별게 아닌데 말로 설명하니 더 어렵게 느껴지는 부분이 있습니다.

위에서 처럼 print()문을 직접 찍어보면 어떤 객체가 other로 넘어왔는지 쉽게 확인 하실수 있습니다.

도움이 되셨으면 좋겠습니다. 더 궁금한 사항은 질문 주시기 바랍니다. ^^