파이썬을 공부하면서 알아가는 중’ 시리즈

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

  • 0
  • 0
0
0

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분전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.