파이썬의 다형성
다형성은 단일 이름이 다른 기능을 가질 수 있음을 의미하는 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 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