Python

(파이썬) 클래스의 생성자 오버로딩은 지원하지 않습니다

코딩ABC 2023. 12. 7. 08:21
반응형

파이썬에서는 생성자(Constructor)를 명시적으로 오버로딩하는 것은 지원되지 않습니다.

생성자는 클래스의 인스턴스를 초기화하는 특별한 메서드로, 파이썬에서는 __init__이라는 이름으로 사용됩니다. 이 메서드는 클래스의 객체가 생성될 때 자동으로 호출되며, 객체의 초기 상태를 설정하는 데 사용됩니다.

 

이전 포스팅에서 다뤘던 생성자를 조금 수정해 보겠습니다.

이러한 생성자는 C++, C#, Java와 같은 언어에서 사용하는 방식으로 생성자 중복(오버로딩)으로 만들었습니다. 하지만 파이썬에서는 생성자 오버로딩을 사용할 수 없습니다.

https://coding-abc.kr/228

class Car:
    make = ""
    model = ""
    year = 0

    # 생성자
    def __init__(self):
        self.make = ""
        self.model = ""
        self.year = 0
            
    # 생성자 중복(Overloading)
    def __init__(self, mk, md, y):
        self.make = mk
        self.model = md
        self.year = y
            
    def setMake(self, m):
        self.make = m
    def setModel(self, m):
        self.model = m
    def setYear(self, y):
        self.year = y

    def PrintInfo(self):
        print(f"제조업체: {self.make}, 모델: {self.model}, 년식: {self.year}")

car1 = Car()
car2 = Car('기아자동차', '쏘렌토', 2023)

car1.PrintInfo()
car2.PrintInfo()

 

실행하면 다음과 같은 오류 메시지를 출력합니다.

파이썬, 생성자 중복(오버로딩) 오류 메시지

 

 

파이썬 생성자 오버로딩: 해결 방법

만약 여러 가지 초기화 방법을 제공하고 싶다면, 다양한 매개변수를 받을 수 있는 여러 개의 __init__ 메서드를 만들어 사용하는 대신, 기본값을 설정하거나 키워드 인수를 활용하여 단일 __init__ 메서드에서 여러 초기화 옵션을 다룰 수 있습니다.

예를 들어, 다음과 같이 매개변수의 초기화를 통해서 작성할 수 있습니다.

class Car:
    make = ""
    model = ""
    year = 0

    # 생성자에 초기값을 부여해서 생성자 중복을 처리할 수 있습니다.
    def __init__(self, mk="", md="", y=0):
        self.make = mk
        self.model = md
        self.year = y
            
    def setMake(self, m):
        self.make = m
    def setModel(self, m):
        self.model = m
    def setYear(self, y):
        self.year = y

    def PrintInfo(self):
        print(f"제조업체: {self.make}, 모델: {self.model}, 년식: {self.year}")

car1 = Car()
car2 = Car('기아자동차')
car3 = Car('기아자동차', '봉고2')
car4 = Car('기아자동차', '쏘렌토', 2023)

car1.PrintInfo()
car2.PrintInfo()
car3.PrintInfo()
car4.PrintInfo()

파이썬, 생성자 오버로딩 해결 방법

 

 

반응형