LANGUAGES/Python
[Python] 파이썬 오버라이딩과 오버로딩
조별하
2023. 5. 16. 00:08
🍃 파이썬에서의 다형성
Java 언어의 다형성을 다루면서 오버라이딩과 오버로딩에 대해 알아보았다. 그렇다면 Python에서도 언어의 다형성이 있는지 살펴보려고 한다.
[Java] Java 다형성과 오버로딩, 오버라이딩
🍃 Java 다형성 ✔️ 다형성 이란 하나의 함수, 클래스가 다양한 방법으로 동작하는 것을 말한다. Java에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding) 을 통해서 다형성을 지원한다. 🌱 오
geminihoroscope.tistory.com
🌱 오버로딩(Overloading)
✔️ 파이썬에서는 오버로딩을 정식으로 지원하지 않는다고 한다. 하지만 구현은 가능하지만 오버로딩을 남발하면 코드가 복잡해진다.
✔️ 파이썬에서는 연산자 오버로딩을 사용할 경우가 많이 있는데 이는 연산자(더하기, 빼기, 나누기, 곱하기)를 객체끼리 사용할 수 있게 하는 기법으로 연산자 오버로딩을 사용하면 아래와 같이 동작할 수 있다.
class HouseCho:
lastname = "조"
def __inint__(self, name):
self.fullname = self.lastname + name
def __add__(self, other):
print(f"{self.fullname}, {other.fullname} 결혼했네")
class HouseLee(HouseCho):
lastname = "이"
def travel(self, where, day):
print(f"{self.fullname}, {where}여행 {day}일 가네.")
pey = HouseCho("응용")
juliet = HouseLee("줄리엣")
print(pey + juliet) <---- 연산자 오버로딩 호출
조응용, 이줄리엣 결혼했네.
🌱 오버라이딩(Overriding)
✔️ 오버라이딩은 부모 클래스에서 정의한 함수를 자식 클래스에서 변경하거나 상속받아 사용하는 것을 의미한다. 부모 클래스의 함수 이름, 기본적인 기능은 그대로 사용하지만 원하는 함수를 커스텀 하여 사용할 때 사용한다.
class HouseCho:
lastname = "조"
def __init__(self, name):
self.fullname = self.lastname + name
def travel(self,where):
print("{0}, {1} 여행을 가다." .format(self.fullname, where))
def love(self, other):
print("{0}, {1} 사랑에 빠졌네." .format(self.fullname, other.fullname))
def __add__(self, other):
print("{0}, {1} 결혼했네." .format(self.fullname, other.fullname))
class HouseLee(HouseCho):
lastname = "이"
def travel(self, where, day):
print("{0}, {1}{2} 여행 가네." .format(self.fullname, where, day))
cho = HouseCho("이야")
cho.travel("1개월")
lee = HouseLee("정아")
lee.travel("2개월", "15일")