이전 시간에 봤었던
__init__ 이나
__del__ 함수들은
특수한 경우에 자동적으로
호출되는 함수들인데
위 두 함수 말고도 자주 사용되는
특수 함수들을 알아보자.
1. __str__ ( )
이 함수는
어떤 자료형을 문자열 자료형으로
변환할 때 사용하는 str() 함수를
사용하고
인자 값에, class의 생성자를 담은
변수라는 객체를 넣어 유용하게
사용할 수 있는 특수 함수로
매개변수로는 self를 받으면 되고
내부에 문자열을 만들어 return
해주면 된다.
굳이 __str__ 함수를 쓰지 않더라도
다른 이름의 method를 사용하여
얼마든지 문자열로 바꿀 수 있는
방법은 있지만
그럼에도 사용하는 이유는
파이썬 개발에서 개발자들끼리의
약속 같은 거라고 이해하면 되겠다.
비교 연산자를 사용할 때
호출하는 함수
eq : equal
ne : nor equal
gt : greater than
gte / ge : grater than or equal
lt : less then
le : less than or equal
각 키워드들은 다른 특수 함수와
동일하게 언더바 두 개를 앞뒤에
넣어 사용해 주면 되고
사용하고자 하는 비교 연산자에
해당하는 키워드의 함수를
선언하여 호출하면 된다.
class Student:
def __init__(self, 이름, 나이):
self.이름 = 이름
self.나이 = 나이
def __eq__(self, other):
print("eq() 함수")
def __ne__(self, other):
print("ne() 함수")
def __gt__(self, other):
print("gt() 함수")
def __ge__(self, other):
print("gt() 함수")
def __lt__(self, other):
print("lt() 함수")
def __le__(self, other):
print("le() 함수")
student = Student("타쿠대디", 27)
student == student
student != student
student > student
student >= student
student < student
student <= student
물론 비교 연산 자체를 print 해줘도
되지만 그렇게 하는 경우 결괏값이
None으로 돌아온다!
class Student:
def __init__(self, 이름, 나이):
self.이름 = 이름
self.나이 = 나이
def __eq__(self, other):
print("eq() 함수")
def __ne__(self, other):
print("ne() 함수")
def __gt__(self, other):
print("gt() 함수")
def __ge__(self, other):
print("gt() 함수")
def __lt__(self, other):
print("lt() 함수")
def __le__(self, other):
print("le() 함수")
student = Student("타쿠대디", 27)
print(student == student)
print(student != student)
print(student > student)
print(student >= student)
print(student < student)
print(student <= student
때문에 이 비교 연산 함수들은 리턴 값으로
반드시 True 혹은 False를 줘야 하는데
비교하고자 하는 함수와 매개변수를
return 값으로 넣어주면 된다.
class Student:
def __init__(self, 이름, 나이):
self.이름 = 이름
self.나이 = 나이
def __eq__(self, other):
return (self.이름 == other.이름) and \
(self.나이 == other.나이)
def __ne__(self, other):
return (self.이름 != other.이름) and \
(self.나이 != other.나이)
def __gt__(self, other):
return (self.이름 > other.이름) and \
(self.나이 > other.나이)
def __ge__(self, other):
return (self.이름 >= other.이름) and \
(self.나이 >= other.나이)
def __lt__(self, other):
return (self.이름 < other.이름) and \
(self.나이 < other.나이)
def __le__(self, other):
return self.이름 <= other.이름 and \
(self.나이 <= other.나이)
student = Student("타쿠대디", 27)
print(student == student)
print(student != student)
print(student > student)
print(student >= student)
print(student < student)
print(student <= student)
위 키워드들 역시
파이썬 개발자들끼리의 약속으로
추후에 라이브러리 등을 만들어
다른 이에게 제공할 때
이처럼 약속된 키워드의 함수들을
사용하면 어떤 의도로 사용한 것인지
굳이 주석을 달지 않더라도 알기 때문에
서로가 사용하기 수월하다.
초보 단계에서는 클래스 내부의 코드를
어떻게 설계하고 어떻게 사용하는지,
또 내부의 패턴이 어떤 식으로 동작하는지
이해하고 익히기가 쉽지 않다.
지금은 그냥 이런 문법들이 있고
이런 식으로 쓰이는구나 정도로만
이해하고 넘어가도 충분하다.
계속 보고 계속 사용하다 보면 결국
익숙해져서 이해하는 날이 올 것이다.
'프로그래밍 > Python' 카테고리의 다른 글
기초) 모듈 (1) | 2020.06.08 |
---|---|
기초) class의 프라이빗 변수와 게터 세터, 프로퍼티 (0) | 2020.06.07 |
기초) 클래스의 개념과 기본 선언 (0) | 2020.06.05 |
기초) Class와 객체지향 프로그램 (0) | 2020.06.04 |
기초) 예외 처리 추가 (0) | 2020.06.02 |