Python에서 생성자 오버로드

Hemank Mehtani 2023년1월30일
  1. 여러 인수를 사용하여 Python에서 생성자 오버로드
  2. @classmethod 데코레이터를 사용하여 Python에서 생성자 오버로드
Python에서 생성자 오버로드

여러 생성자는 매개변수에 따라 사용자 정의 클래스를 사용자 정의하는 데 도움이 됩니다. 다른 매개변수를 사용하는 동안 다른 생성자를 트리거할 수 있습니다.

여러 생성자는 Python에서 직접 지원되지 않습니다. 클래스에 여러 생성자가 제공되면 최신 생성자가 이전 생성자를 재정의합니다. 그러나 Python에서 생성자를 오버로드하는 몇 가지 대체 방법이 있습니다.

이 기사에서는 이러한 방법에 대해 설명합니다.

여러 인수를 사용하여 Python에서 생성자 오버로드

함수 오버로딩은 매개변수 유형이 다른 동일한 이름을 가진 다른 함수를 갖는 것을 말합니다. 다른 인수 집합을 기반으로 하는 모든 조건과 함께 여러 조건을 선언하여 생성자를 오버로드할 수 있습니다.

예를 들어,

class delftstack:
    def __init__(self, *args):
        if isinstance(args[0], int):
            self.ans = args[0]
        elif isinstance(args[0], str):
            self.ans = "Hello from " + args[0]


s1 = delftstack(1)
print(s1.ans)

s2 = delftstack("Delft")
print(s2.ans)

출력:

1
Hello from Delft

위의 예에서는 생성자에 두 가지 유형의 매개변수가 있습니다. 하나는 문자열이고 다른 하나는 정수입니다. 구문은 제공된 인수 유형에 따라 출력을 제공하도록 오버로드됩니다.

제공된 인수의 수에 따라 생성자를 오버로드할 수도 있습니다. 이 방법은 이전 예제와 유사합니다.

아래 코드를 참조하십시오.

class delftstack:
    def __init__(self, *args):
        if len(args) > 3:
            self.ans = "More than three"
        elif len(args) <= 3:
            self.ans = "Less than three"


s1 = delftstack(1, 2, 3, 4)
print(s1.ans)

s2 = delftstack(1, 2)
print(s2.ans)

출력:

More than three

Less than three

@classmethod 데코레이터를 사용하여 Python에서 생성자 오버로드

@classmethod 데코레이터를 사용하면 클래스를 인스턴스화하지 않고도 함수에 액세스할 수 있습니다. 이러한 메서드는 클래스 자체와 해당 인스턴스를 통해 액세스할 수 있습니다. 오버로딩에 사용될 때 이러한 함수를 팩토리 메소드라고 합니다. 그것들을 사용하여 파이썬에서 생성자 오버로딩의 개념을 구현할 수 있습니다.

아래 코드를 참조하십시오.

class delftstack(object):
    def __init__(self, a):
        self.ans = "a"

    @classmethod
    def first(cls):
        return "first"

    @classmethod
    def second(cls):
        return "second"


s1 = delftstack.first()

print(s1)

s2 = delftstack.second()

print(s2)

출력:

first

second

이 방법은 생성자를 오버로딩하는 가장 파이썬적인 방법입니다. 위의 예에서 팩토리 메소드의 cls 인수는 클래스 자체를 참조합니다.

관련 문장 - Python Constructor