티스토리 뷰

파이썬/클래스

파이썬 클래스 활용

코린이도이 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

메소드 오버라이딩: 자식 클래스에서 부모 클래스에 정의된 메소드를  재정의하여 대치하는 것

다형성

  • 다른 클래스에 속한 같은 이름의 인스턴스들이 동일한 메소드 이름으로 호출할 경우 동적으로 선택되어 수행

  • 쉽게 말하면 다양한 형태를 가질 수 있다를 뜻함

다형성의 장점

  • 다른 클래스에 속한 같은 이름의 다양한 메소드들에게 유사한 작업을 수행시킬 수 있음

  • 추상클래스를 상속하는 다른 서브클래스 내에 작성된 같은 이름의 메소드를 다른 목적으로 사용할 수 있음

파이썬에서 다형성의 장점

  • 자료형의 타입이 동적으로 결정되므로 다형성을 적용하기에 훨씬 용이함

isinstance(인스턴스, 클래스): 해당 인스턴스가 해당 클래스에 속하면 True, 속하지 않으면 False 반환

issubclass(A 클래스, B  클래스): A 클래스가 B클래스와 같거나 자식 클래스이면 True, 아니라면 False 반환

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함