연산자 중복 (Operator Overloading)
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
9. 연산자 중복 정의(Operator Overloading)¶
- 객체에서 필요한 연산자를 재정의하는 것
- 연산자 중복을 위해 미리 정의된 특별한 메서드 존재: __로 시작 __로 끝나는 특수 함수
- 해당 메쏘드들을 구현하면, 객체에 여러가지 파이썬 내장 함수나 연산자를 재정의하여 사용 가능
- https://docs.python.org/3/reference/datamodel.html
Quadrangle + Figure = Quadrangle(widths, heights)¶
In [7]:
class Figure:
def __init__(self, width, height):
self.width = width
self.height = height
In [8]:
class Quadrangle:
def __init__(self, width, height):
self.width = width
self.height = height
def __add__(self, second):
return Quadrangle(self.width + second.width, self.height + second.height)
In [9]:
rectangle1 = Quadrangle(2, 3)
figure1 = Figure(3, 4)
rectangle2 = rectangle1 + figure1
rectangle2.width
Out[9]:
In [16]:
class Quadrangle:
def __init__(self, width, height):
self.width = width
self.height = height
def __add__(self, second):
return Quadrangle(self.width + second, self.height + second)
# 연산자 곱셈
def __mul__(self, num):
return Quadrangle(self.width * num, self.height * num)
# 연산자 len() - 길이
def __len__(self):
return self.width * 2 + self.height * 2
# 연산자 A[index] - 리스트
def __getitem__(self, index):
if index == 0:
return self.width
elif index == 1:
return self.height
# 연산자 str() - 문자열 변환
def __str__(self):
return 'width : {}, height : {}'.format(self.width, self.height)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
초간단 연습11
아래 코드를 실행시키면서, 출력 값이 왜 이렇게 나왔는지 이해하기(연산자 오버로딩 이해)
아래 코드를 실행시키면서, 출력 값이 왜 이렇게 나왔는지 이해하기(연산자 오버로딩 이해)
rectangle1 = Quadrangle(2, 3) rectangle3 = rectangle1 + 4 print (rectangle3.width) print(rectangle3.width, rectangle3.height) rectangle4 = rectangle1 * 3 print(str(rectangle1)) print(str(rectangle4)) print(len(rectangle1))
객체 주소 확인하기와 is, == 연산자 이해하기 (심화)¶
id(객체명): 객체가 가리키는 실제 주소값
** is 와 == 연산자 차이**
- is : 가리키는 객체 자체가 같은 경우 True
- == : 가리키는 값들이 같은 경우 True
In [137]:
class Figure(Quadrangle):
pass
rectangle1 = Quadrangle(1, 2)
rectangle2 = Quadrangle(1, 2)
rectangle3 = rectangle1
print (id(rectangle1))
print (id(rectangle2))
print(rectangle1 is rectangle2)
print(rectangle1 is rectangle3)
print(rectangle1 == rectangle2)
print(rectangle1.width == rectangle2.width)
한발짝 더 나가보기!(심화 문제)
아래 코드를 실행시키면서, 위 코드 결과와 비교하며, 출력 값이 왜 이렇게 나왔는지 이해하기(연산자 오버로딩 이해)
아래 코드를 실행시키면서, 위 코드 결과와 비교하며, 출력 값이 왜 이렇게 나왔는지 이해하기(연산자 오버로딩 이해)
In [138]:
class Figure(Quadrangle):
# 연산자 ==
def __eq__(self, p):
if ((self.width == p.width) and (self.height == p.height)):
return True
else:
return False
rectangle1 = Figure(1, 2)
rectangle2 = Figure(1, 2)
rectangle3 = rectangle1
print (id(rectangle1))
print (id(rectangle2))
print(rectangle1 is rectangle2)
print(rectangle1 is rectangle3)
print(rectangle1 == rectangle2)
print(rectangle1.width == rectangle2.width)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
협업 과제(남에게 설명하면, 자신이 배운답니다.!)
2. 영어 단어 길이를 기준으로 리스트를 정렬하기
- \__len\__(self) 정의하기
- sorted 함수와 lambda 로 길이 순 정렬 기법
3. 영어 단어의 두 번째 알파벳을 기준으로 리스트를 정렬하기
- \__getitem\__(self, key) 정의하기
- 참고: sorted 함수와 lambda 로 리스트 정렬 기법
- 구글로 필요한 부분을 찾는 역량을 길러야 합니다. https://wayhome25.github.io/python/2017/03/07/key-function/
사전조건: Keyword 클래스를 생성
- 클래스 인자로 영어 단어 한 개를 받습니다.
- attribute: 영어 단어
- method: 연산자 오버로딩 - len() : 영어 단어 길이 리턴
프로그래밍
- Keyword 클래스로 10개의 임의 영어 단어를 가지고 각각 객체로 만들어서 하나의 리스트에 넣습니다.(위 예 참조)
2. 영어 단어 길이를 기준으로 리스트를 정렬하기
- \__len\__(self) 정의하기
- sorted 함수와 lambda 로 길이 순 정렬 기법
3. 영어 단어의 두 번째 알파벳을 기준으로 리스트를 정렬하기
- \__getitem\__(self, key) 정의하기
- 참고: sorted 함수와 lambda 로 리스트 정렬 기법
- 구글로 필요한 부분을 찾는 역량을 길러야 합니다. https://wayhome25.github.io/python/2017/03/07/key-function/
리스트변수명 = sorted(리스트변수명, key=lambda x:len(x))
In [104]:
class Keyword:
def __init__(self, word):
self.word = word
# 연산자 len() - 길이
def __len__(self):
return len(self.word)
# 연산자 A[index] - 리스트
def __getitem__(self, index):
return self.word[index]
def get_word(self):
return self.word
hi = Keyword('hi')
hello = Keyword('hello')
bye = Keyword('bye')
len(hi)
keywords = [hi, hello, bye]
keywords = sorted(keywords, key=lambda x:len(x))
for keyword in keywords:
print (keyword.get_word())
keywords = sorted(keywords, key=lambda x:x[1])
for keyword in keywords:
print (keyword.get_word())
In [249]:
class Keyword:
def __init__(self, word):
self.keyword = word
def __len__(self):
return len(self.keyword)
key1 = Keyword('hi')
key2 = Keyword('hello')
key3 = Keyword('bye')
In [250]:
keywords = [key1, key2, key3]
keywords = sorted(keywords, key=lambda x:len(x))
for keyword in keywords:
print (keyword.keyword)
In [251]:
class Keyword:
def __init__(self, word):
self.keyword = word
def __getitem__(self, index):
return self.keyword[index]
key1 = Keyword('hi')
key2 = Keyword('hello')
key3 = Keyword('bye')
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [252]:
keywords = [key1, key2, key3]
keywords = sorted(keywords, key=lambda x:x[1])
for keyword in keywords:
print (keyword.keyword)