1. [Python] 객체지향프로그래밍 - OOP (Object Orientated Programming)
1.1. 오버로딩 / 오버라이딩
1.2. 특수한 메서드
1.3. 상속 / 오버라이딩 OOP 예제
1. [Python] 객체지향프로그래밍 - OOP (Object Orientated Programming)
Object Orientated Programming in Python
https://www.youtube.com/watch?v=JeznW_7DlB0 를 참고하여 작성하였습니다.
모든 Python의 구현은 Class의 Instance인 Object로 이루어집니다.
1.1. 오버로딩 / 오버라이딩
- 오버로딩 : 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개 변수의 개수나 타입이 다르면 다르게 정의되는 것을 의미합니다.
- 오버라이딩 : 상속관계에 있는 부모클래스에서 이미 정의된 메소드를 자식클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것을 의미합니다.
1.2. 특수한 메서드
파이썬에는 내장된 많은 자료형들에, 해당하는 자료형에 대한 연산을 정의하는 메소드들이 있습니다.
그 메소드들은 메소드의 이름 앞뒤에 __
(double underscore)를 지니고 있습니다.
이런 것처럼 사용자는 특장 클래스가 기능할 수 있는 특수한 메서드를 만들 수 있습니다.
이 중 두가지만 알아보겠습니다.
__init__
생성자 : 클래스 생성시 자동으로 실행되는 메서드입니다.
__str__
객체 자체로 호출하는 메서드 : 클래스 자체의 내용을 출력할 때 형식을 지정하는 메서드입니다.
아래 예제는 이 두가지 메서드가 구현된 Pet 클래스 예제입니다.
class Pet():
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'name : {self.name}, age : {self.age}'
my_pet = Pet('Happy', 1)
print(my_pet)
# name : Happy, age : 1
1.3. 상속 / 오버라이딩 OOP 예제
상속과 오버라이딩을 포함한 아래의 OOP 예제를 통해 보며 이해해보면 도움이 될 것입니다.
class Pet():
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'name : {self.name}, age : {self.age}'
def show(self):
print(f'I am {self.name} and I am {self.age} years old')
def speak(self):
print("I don't know what I say")
class Cat(Pet):
# 상속받는 클래스의 메서드를 그대로 복붙해도 되지만 이렇게 구현해줄 수 있습니다.
# 복붙하는 것과 같은 동작은 아닙니다.
# 1. 복붙할 경우(self.name = name, self.age = age), Cat의 attribute로 name과 age가 생겨 대입됩니다.
# 2. super()로 부모 메서드를 사용할 경우 Pet의 attribute로 name과 age가 생겨 대입됩니다.
def __init__(self, name, age, color):
super().__init__(name, age)
self.color = color
def speak(self):
print("Meow")
def show(self):
print(f"I am {self.name} and I am {self.age} and I am {self.color}")
def __str__(self):
return f'이름 : {self.name}, 나이 : {self.age}, 색깔 : {self.color}'
class Dog(Pet):
def speak(self):
print("Bark")
my_pet = Pet('Happy', 1)
print(my_pet)
# name : Happy, age : 1
kitty = Cat("kitty", 10, 'yellow')
print(kitty)
# 이름 : kitty, 나이 : 10, 색깔 : yellow
- self : 넘겨받은 self를 이용해서 method에서 attribute에 생성자로 넘겨받은 데이터를 대입해줄 수 있습니다.
- 각 method에 self를 인자로 넘겨서 method가 method를 사용하는 object의 attribute에 접근할 수 있도록 해주는 것입니다.
'SW > Python & Django' 카테고리의 다른 글
[Python] WEB 크롤링 라이브러리, BeautifulSoup (0) | 2021.07.03 |
---|---|
[Django] Test Driven Development, TDD (0) | 2021.07.01 |
[Python] exe 파일 만들기 (PyInstaller) (0) | 2021.06.04 |
[Python] GIL (0) | 2021.05.31 |
[Python] 2차원 리스트 회전시키기 (0) | 2021.04.26 |
Comment