파이썬은 오버로딩이 안된다.

1. 메소드 오버로딩 (Method Overloading)

중복정의

메소드 오버로딩은 동일한 클래스 안에서 메소드 이름이 같지만 매개변수의 개수, 자료형이 다른 것을 의미한다.

파이썬은 메소드 오버로딩을 지원하지 않는다.

동적 타입 검사 -> 실행 시 타입 검사(타입 에러가 실행시에 발견)


class Book():  
    def registration(self, author, book_name):  
        return author  
  
    def registration(self, author, book_name, publisher):  
        return author  
  
if __name__ == '__main__':  
    a = Book()  
    print(a.registration("김학진", "나는 전설이다"))  
    print(a.registration("김학진", "나는 전설이다", "blex"))


Traceback (most recent call last):
  File "D:/CloudStation/SourceCode/sole/test.py", line 10, in <module>
    print(a.registration("김학진", "나는 전설이다"))
TypeError: registration() missing 1 required positional argument: 'publisher'

A. 가변 인자

가변 인자를 사용하여 함수명이 같지만 매개변수를 다양하게 처리할 수 있음

가변 인자는 인수의 갯수에 제한이 없다.

단, 매개변수의 자료형은 tuple임.


class Book():  
    def registration(self, *argv):  
        return argv  
  
  
if __name__ == '__main__':  
    a = Book()  
    print(a.registration("김학진", "나는 전설이다"))  
    print(a.registration("김학진", "나는 전설이다", "blex"))


('김학진', '나는 전설이다')
('김학진', '나는 전설이다', 'blex')

B. 키워드 가변 인자

매개변수의 자료형이 Dictionary임.


class Book():  
    def registration(self, **kwargs):  
        return kwargs 
  
  
if __name__ == '__main__':  
    a = Book()  
    print(a.registration(name="김학진", book_name="나는 전설이다"))  
    print(a.registration(name="김학진", book_name="나는 전설이다", publisher="blex"))
    

{'name': '김학진', 'book_name': '나는 전설이다'}
{'name': '김학진', 'book_name': '나는 전설이다', 'publisher': 'blex'}

C. 고정 인자와 가변 인자 같이 쓰기

매개변수의 순서는 고정 매개변수, *args, **kwargs 순서로 지정한다.


def book(a, *args, **kwargs):  
    print(a, *args, **kwargs)

[1] hyeonggi.kim, [Python 입문] 14. 파이썬 오버라이딩과 오버로딩 (tistory.com). Tistory. (accessed Aug 10, 2021)

[2] junior_datalist. 파이썬 메소드 오버라이딩, 오버로딩 (tistory.com). Tistory. (accessed Aug 10, 2021)

[3] suasue. Python | 가변인자(args)와 키워드 가변인자(*kwargs) (velog.io). Velog. (accessed Aug 10, 2021)

#파이썬 #오버로딩 #고정인자 #가변인자 #키워드고정인자

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.