파이썬/클래스
파이썬 클래스 활용
코린이도이
2020. 11. 4. 15:09
연산자 오버로딩
연산자 오버로딩이란?
-
'메소드의 중복정의'
-
즉, 같은 이름의 메소드를 사용하는 것
파이썬에서의 오버로딩
-
파이썬에서 같은 이름의 메소드를 사용하면 늦게 정의한 메소드로 덮어쓰기 됨
수치 연산자 오버로딩
메소드(Method) | 연산자(Operator) | 인스턴스 객체(O)에 대한 사용 예 |
__add__(self, B) | + (이항) | O + B, O += B |
__sub__(self, B) | - (이항) | O - B, O -= B |
__mul__(self, B) | * | O * B, O *= B |
__truediv__(self, B) | / | O / B, O /= B |
class MyInteger:
def __init__(self, i):
self.i = i
def __add__(self, other):
return self.i + other
i = MyInteger(10)
print(i + 10) #출력 값은 20/ 연산자 왼쪽에 객체, 연산자 오른쪽에 객체가 와야함
class MyInteger:
def __init__(self, i):
self.i = i
def __radd__(self, other):
return self.i + other
i = MyInteger(10)
print(10 + i) #출력 값은 20/ 메소드 앞에 r을 붙여 연산자 왼쪽에 피연산자, 연산자 오른쪽에 객체가 옴
비교 연산자 오버로딩
메소드 | 연산자 |
__It__(self, other) | self < other |
__le__(self, other) | self <= other |
__eq__(self, other) | self == other |
__ne__(self, other) | self != other |
__gt__(self, other) | self > other |
__ge__(self, other) | self >= other |
시퀀스/매핑 자료형의 연산자 오버로딩
메소드 | 연산자 |
__len__(self) | len() |
__contains__(self, item) | item in self |
__getitem__(self, key) | self[key] |
__setitem__(self, key, value) | self[key] = value |
__delitem__(self, key) | del self(k) |
isinstance(인스턴스, 클래스): 해당 객체가 어떤 클래스로부터 만들어졌는지 확인할 수 있음
상속과 다형성
상속
class 부모 클래스:
내용
class 자식 클래스(부모 클래스):
내용
-
상속받은 자식 클래스는 부모 클래스의 속성과 메소드를 사용할 수 있음 → 자식 클래스의 이름공간에 부모 클래스의 이름공간이 포함됨
상속의 이유
-
코드를 재사용할 수 있음
-
상속받은 자식 클래스는 부모 클래스의 모든 기능을 그대로 사용 가능
-
자식 클래스는 필요한 기능만 정의하거나, 기존의 기능을 변경(Overriding)할 수 있음
class Person:
def __init__(self, name, phone=None):
self.name = name
self.phone = phone
def __str__(self):
return '<Person {0} {1}>'.format(self.name, self.phone)
class Employee(Person): #부모 클래스인 Person을 자식 클래스Employee가 사용
def __init__(self, name, phone, position, salary):
Person.__init__(self, name, phone) #부모 클래스인 Person을 연산자로
self.position = position
self.salary = salary
메소드 오버라이딩: 자식 클래스에서 부모 클래스에 정의된 메소드를 재정의하여 대치하는 것
다형성
-
다른 클래스에 속한 같은 이름의 인스턴스들이 동일한 메소드 이름으로 호출할 경우 동적으로 선택되어 수행
-
쉽게 말하면 다양한 형태를 가질 수 있다를 뜻함
다형성의 장점
-
다른 클래스에 속한 같은 이름의 다양한 메소드들에게 유사한 작업을 수행시킬 수 있음
-
추상클래스를 상속하는 다른 서브클래스 내에 작성된 같은 이름의 메소드를 다른 목적으로 사용할 수 있음
파이썬에서 다형성의 장점
-
자료형의 타입이 동적으로 결정되므로 다형성을 적용하기에 훨씬 용이함