클래스 가격비교 기능 질문
251
작성한 질문수 11
클래스 안에 가격비교를 위한 메서드를 다음과 같이 만들어 주셨는데요,
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로 넘어왔는지 쉽게 확인 하실수 있습니다.
도움이 되셨으면 좋겠습니다. 더 궁금한 사항은 질문 주시기 바랍니다. ^^
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
117
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
210
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
278
1





