오버로딩

codakcodak·2023년 10월 10일
0

OOP python

목록 보기
7/19
post-thumbnail
post-custom-banner

오버로딩

  • 같은 이름의 메소드를 중복하여 정의하는 것
  • 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성
  • 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나

파이썬의 오버로딩

  • 파이썬은 타입이 동적으로 변하는 동적타입언어이기 때문에 오버로딩이 불가능하다.
  • 오버로딩을 비슷하게 구현하기 위해 라이브러리를 활용한다.

불가능 예시

  • 가장 아랫단의 코드로 자동으로 오버라이딩 된다.
class Siri:
	#1번
    def over(self, x):
        print(x)
	#2번
    def over(self):
        print("test1")


siri = Siri()
siri.over() #정상출력
siri.over(10) #타입에러
#over라는 메서드는 인자를 받지 않은 2번 over로 오버라이딩 되었다.
test1
TypeError: Siri.over() takes 1 positional argument but 2 were given

자료형에 따른 분기처리

  • 인자의 자료형에 따라 분기처를 통해 로직을 구성한다.
  • args,kwargs를 통해 모든 인자를 받아주고 후처리를 진행한다.
  • args는 튜플,kwargs는 dict형태로 저장된다.
class Siri:
    def over(self, *args, **kwargs):
        if len(args) == 0:
            print("over test")
        elif type(args[0]) is int:
            if kwargs["mode"] == "sum":
                print(sum(args))
        elif type(args[0]) is str:
            if kwargs["mode"] == "sum":
                print(args[0] + "+" + args[1])
        print("test1")


siri = Siri()
print("==============1==================")
siri.over()
print("==============2==================")
siri.over("10", "20", mode="sum")
print("==============3==================")
siri.over(10, 20, mode="sum")
==============1==================
over test
test1
==============2==================
10+20
test1
==============3==================
30
test1

MultipleDispatch

  • 자료형을 인자로 넣어준 dispatch 데코레이터를 활용한다.
class Siri:
    @dispatch(int)
    def over(self, x):
        print(x)

    @dispatch(int, int)
    def over(self, x, y):
        print(x * y)


siri = Siri()
print("==============1==================")
siri.over(10)
print("==============2==================")
siri.over(10, 20)
==============1==================
10
==============2==================
200
profile
숲을 보는 코더
post-custom-banner

0개의 댓글