다형성은 여러 형태를 의미합니다. 파이썬에서 우리는 여러 형태를 취하는 동일한 연산자나 함수를 찾을 수 있습니다. 동일한 이름의 클래스 메소드를 갖는 다른 클래스를 생성할 때도 유용합니다. 이는 많은 코드를 다시 사용하고 코드 복잡성을 줄이는 데 도움이 됩니다. 다형성은 아래의 몇 가지 예에서 볼 수 있듯이 상속과도 연결됩니다.
연산자의 다형성
+ 연산자는 두 개의 입력을 받아 입력이 무엇인지에 따라 결과를 제공할 수 있습니다. 아래 예에서 우리는 정수 입력이 정수를 산출하는 방법과 입력 중 하나가 float이면 결과가 float가 되는 방법을 볼 수 있습니다. 또한 문자열의 경우 단순히 연결됩니다. 이것은 파이썬에서 + 연산자가 생성되는 방식 때문에 자동으로 발생합니다.
예
a = 23 b = 11 c = 9.5 s1 = "Hello" s2 = "There!" print(a + b) print(type(a + b)) print(b + c) print(type (b + c)) print(s1 + s2) print(type(s1 + s2))
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
출력
34 20.5 HelloThere!
내장 함수의 다형성
우리는 또한 다른 파이썬 함수가 다른 유형의 입력을 받아 다르게 처리할 수 있다는 것을 알 수 있습니다. len()에 문자열 값을 제공하면 그 안의 모든 문자를 셉니다. 그러나 5개의 튜플이나 사전을 입력으로 사용하면 다르게 처리합니다.
예
str = 'Hi There !' tup = ('Mon','Tue','wed','Thu','Fri') lst = ['Jan','Feb','Mar','Apr'] dict = {'1D':'Line','2D':'Triangle','3D':'Sphere'} print(len(str)) print(len(tup)) print(len(lst)) print(len(dict))
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
출력
10 5 4 3
사용자 정의 메소드의 다형성
이름은 같지만 다른 클래스 이름으로 래핑된 메서드를 만들 수 있습니다. 그래서 우리는 다른 결과를 얻기 위해 접두사를 붙인 다른 클래스 이름으로 같은 메서드를 계속 호출할 수 있습니다. 아래 예에는 동일한 방법을 사용하여 둘레와 면적을 얻기 위한 두 개의 클래스(직사각형과 원)가 있습니다.
예
from math import pi class Rectangle: def __init__(self, length, breadth): self.l = length self.b = breadth def perimeter(self): return 2*(self.l + self.b) def area(self): return self.l * self.b class Circle: def __init__(self, radius): self.r = radius def perimeter(self): return 2 * pi * self.r def area(self): return pi * self.r ** 2 # Initialize the classes rec = Rectangle(5,3) cr = Circle(4) print("Perimter of rectangel: ",rec.perimeter()) print("Area of rectangel: ",rec.area()) print("Perimter of Circle: ",cr.perimeter()) print("Area of Circle: ",cr.area())
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
출력
Perimter of rectangel: 16 Area of rectangel: 15 Perimter of Circle: 25.132741228718345 Area of Circle: 50.26548245743669