Python - Overriding
1 minute read
오버라이딩
- 클래스 상속에서 사용되는 개념
- 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의
클래스 주요 오버라이딩 멤버함수
- __init__(self[, …]) : 생성자 함수 #doc
- __repr__(self) : 시스템이 해당 객체를 인식할 수 있는 Official 문자열 #doc
- 보통 디버깅을 위해 사용
- 출력 문자열을 통해, 바로 인스턴스를 생성할 수 있도록, 인스턴스 생성
- __str__(self) : Informal 문자열. str(obj) 시에 호출
- __getitem__(self, key) : self[key]를 구현 #doc
- __setitem(self, key, value) : self[key]=value #doc
클래스 주요 오버라이딩 멤버함수 - 연산자 재정의 #ref
- Binary Arthmetic Operations
-
+,-,*,@,/,//,%,divmod,pow,**,«,»,&,^, - ex) x + y 는 x.add(y) 함수를 호출
- Augmented Arithmetic Assignments
-
+=, -=, *=, @=, /=, //=, %=, **=, «=, »=, &=, ^=, = - ex) x += y 는 x.iadd(y) 함수를 호출
- Unary Arthmetic Operations : - , + , abs, ~
- ex) -obj는 obj.neg() 함수를 호출
- built-in functions : complex, int, float, round
- ex) complex(obj)는 obj.complex() 함수를 호출
- Rich Comparison : <, <=, ==, !=, >, >=
- ex) x < y는 x.lt(y) 함수를 호출
예시: __add__, __iadd__ 구현하기
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __add__(self, value):
return Person(self.name, self.age + value)
def __iadd__(self, value):
self.age += value
return self
def __repr__(self):
return "Person('{}', {})".format(self.name, self.age)
>>> tom = Person('Tom', 10)
>>> tom + 10
Person('Tom', 20)
>>> tom += 20
>>> tom
Person('Tom', 30)
클래스 주요 오버라이딩 멤버함수 - with절 지원
- __enter(self) #ref
- __exit__(self, exctype, excvalue, traceback) #ref
- exc_type : 예외(Exception) 클래스 타입
- exc_value : 예외 인스턴스
- traceback : Traceback 인스턴스
- 예외가 발생하지 않았다면, 인자 3개 값은 모두 None으로서 호출
예시: 클래스를 통한 with절 지원
class File:
def __init__(self, path, mode):
self.path = path
self.mode = mode
def __enter__(self):
self.f = open(self.path, self.mode, encoding='utf-8')
def __exit__(self, exc_type, exc_value, traceback):
# 예외 발생여부에 상관없이 파일을 닫습니다.
self.f.close()
with File('filepath.txt', 'wt') as f:
f.write('hello world')
AskDjango의 내용입니다. 언제나 잘보고 있어요 ㅎ
I feedback.
Let me know what you think of this article in the comment section below!
Let me know what you think of this article in the comment section below!
comments powered by Disqus