-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
클래스 가격비교 기능 질문
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를 반영하는 객체를 뜻하는 것인가요??
이 부분이 잘 와닿지 않네요..
감사합니다.
답변을 작성해보세요.
0
남박사
지식공유자2019.12.19
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로 넘어왔는지 쉽게 확인 하실수 있습니다.
도움이 되셨으면 좋겠습니다. 더 궁금한 사항은 질문 주시기 바랍니다. ^^
답변 1