파이썬의 다형성

Manav Narula 2023년6월21일
  1. 파이썬의 다형성
  2. Python에서 다형성을 위한 클래스 메서드 사용
  3. Python에서 다형성을 위한 메서드 재정의 사용
  4. Python에서 다형성을 위해 함수 및 연산자 오버로딩 사용
파이썬의 다형성

다형성은 단일 이름이 다른 기능을 가질 수 있음을 의미하는 OOP의 특성입니다. 단일 엔터티는 다른 형태를 취할 수 있습니다.

이 튜토리얼은 다형성이 파이썬에서 어떻게 구현되는지 보여줍니다.

파이썬의 다형성

이를 이해하는 가장 좋은 방법은 len() 함수를 사용하는 것입니다. 이 함수는 객체마다 다르게 해석됩니다.

목록의 경우 존재하는 총 요소와 문자열 및 존재하는 총 문자를 반환합니다.

암호:

lst = ["delft", "stack"]
s = "delftstack"
print(len(lst), len(s))

출력:

2 10

Python의 다형성을 설명하는 또 다른 일반적인 기능은 + 연산자입니다. 이 연산자는 파이썬에서 두 숫자 사이에 더하기를 수행할 수 있습니다.

그러나 문자열과 함께 사용하면 두 문자열을 결합하는 연결 연산자 역할을 합니다.

암호:

a = 5 + 6
s = "delft" + "stack"
print(a, s)

출력:

11 delftstack

Python에서 다형성을 위한 클래스 메서드 사용

모든 것은 Python의 객체이며 일부 클래스에 속합니다. 메서드는 클래스의 개체와 연결됩니다.

이것이 + 연산자와 len() 함수가 다른 객체에 대해 다른 기능을 수행하는 이유입니다. + 연산자는 다른 개체에 대해 다르게 정의된 매직 함수를 호출합니다.

우리는 클래스를 생성하고 이를 달성할 수 있습니다. 두 클래스는 이름은 같지만 용도와 정의가 다른 함수를 가질 수 있습니다.

암호:

class A:
    def fun(self):
        print("Class A")


class B:
    def fun(self):
        print("Class B")


ob1 = A()
ob2 = B()
for i in (ob1, ob2):
    i.fun()

출력:

Class A
Class B

Python에서 다형성을 위한 메서드 재정의 사용

다형성은 파이썬에서 클래스 상속과도 연관되어 있습니다. 상속은 클래스가 다른 클래스의 기능에 액세스하는 것을 말합니다.

클래스와 그 하위 클래스는 같은 이름을 가진 함수를 포함할 수 있으며 Python에서 함수 재정의를 사용할 수 있습니다. 메서드 재정의를 사용하여 자식 클래스에 이미 정의된 메서드를 구현할 수 있습니다.

자식 클래스에 따라 함수를 재정의할 수 있습니다.

암호:

class A:
    def fun(self):
        print("Class A")


class B(A):
    def fun(self):
        print("Class B")


ob1 = A()
ob2 = B()
for i in (ob1, ob2):
    i.fun()

출력:

Class A
Class B

위의 코드 예제에서 클래스 B는 클래스 A에서 상속하지만 fun() 메서드는 클래스 B에서 재정의되고 클래스에 따라 정의됩니다.

재정의된 함수의 A 클래스에서 fun() 함수에 액세스할 수도 있습니다.

암호:

class A:
    def fun(self):
        print("Class A")


class B(A):
    def fun(self):
        A.fun(self)
        print("Class B")


ob2 = B()
ob2.fun()

출력:

Class A
Class B

Python에서 다형성을 위해 함수 및 연산자 오버로딩 사용

함수 오버로딩은 다형성을 구현하는 흥미로운 기능입니다. 이 기능은 Python에서 사용할 수 없으며 가장 최근에 정의된 함수가 Python에서 호출됩니다.

Python에서 연산자를 오버로드할 수 있습니다. 다른 연산자가 개체 유형에 따라 다른 기능을 수행할 수 있다는 것을 알고 있으며 + 연산자로 명확하게 볼 수 있습니다.

이는 연산자가 사용될 때마다 내부적으로 매직 함수를 호출하기 때문에 발생합니다. 예를 들어 + 연산자는 __add__ 메서드를 내부적으로 호출합니다.

이 마법 함수는 이름 앞뒤에 이중 밑줄이 있습니다. 매직 함수는 직접 호출할 수 없지만 다른 연산자의 동작을 수정하기 위해 다른 클래스에 대해 정의할 수 있습니다.

암호:

class A:
    def __init__(self, a):
        self.a = a

    def __add__(self, o):
        return self.a + o.a + 2


ob1 = A(5)
ob2 = A(4)
print(ob1 + ob2)

출력:

11

위의 예에서는 A 클래스의 매직 함수를 수정하고 결과에 2를 추가하여 + 연산자를 오버로드했습니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn