다형성(Polymorphism)
다형성을 사용하면 동일한 기능을 다르게 작동시킬 수 있습니다.
예를 들어, 다음 스크립트에 있는 메소드는 두 개의 필수 매개변수 값 a와 b와 하나의 선택적 매개변수 c를 사용하였으며 기본값을 0으로 설정하였습니다.
세 개의 매개변수에 대한 값을 전달하면 세 개의 매개변수 값의 합계가 반환됩니다. 두 개의 값을 전달하면 c에 c 값이 할당됩니다. 매개변수 c의 값이 0이면 b에서 b를 빼고 값을 반환합니다.
def my_func(a, b, c=0):
if c == 0:
return a - b
else:
return a + b + c
my_func()메서드의 2개 또는 3개의 매개변수를 입력한 후 출력한 결과입니다. 출력은 세 개의 매개변수를 my_func() 함수에 전달할 때 3 매개변수의 합이 반환됨을 보여줍니다. 그렇지 않고 두 개의 매개변수를 전달하면 첫 번째 매개변수에서 두 번째 매개변수 값을 빼서 결과를 반환합니다.
print(my_func(10, 20, 30))
print(my_func(10, 20))
Output:
60
-10
상속을 통해 다형성을 구현하려면 부모 클래스에서 구현된 메서드를 재정의해야 합니다. 메서드를 재정의한다는 것은 부모 클래스와 자식 클래스에 같은 이름을 가진 메서드를 갖는 것을 의미합니다. 이 경우 자식 클래스가 부모 클래스 메서드를 재정의합니다. 자식 클래스 객체를 사용하여 해당 메서드를 호출하면 메서드의 자식 클래스 구현이 실행됩니다.
다음 스크립트는 display_shape_attr() 메서드를 사용하여 Shape라는 클래스를 정의합니다.
class Shape:
def __init__(self, name, area):
self.shape_name = name
self.area = area
def display_shape_attr(self):
print("The shape name is ", self.shape_name)
print("The shape area is ", self.area)
자식 클래스 Circle은 부모 Shape 클래스를 상속합니다. 자식 클래스에서도 display_shape_attr() 메서드를 재정의하고 자체 구현을 합니다.
class Circle(Shape):
def __init__(self, name, area, radius):
super().__init__(name, area)
self.radius = radius
def display_shape_attr(self):
print("The shape name is ", self.shape_name)
print("The shape area is ", self.area)
print("The radius of the circle is ", self.radius)
마찬가지로 Square 클래스도 Circle클래스처럼 Shape 클래스를 상속하고 display_shape_attr() 메서드를 재정의하고 자체 구현을 합니다.
class Square(Shape):
def __init__(self, name, area, vertices):
super().__init__(name, area)
self.vertices = vertices
def display_shape_attr(self):
print("The shape name is ", self.shape_name)
print("The shape area is ", self.area)
print("Total number of vertices in a square ", self.vertices)
이제 Shape, Circle 및 Square 클래스의 객체를 만들고 display_shape_attr() 메서드를 호출하면 해당 객체가 display_shape_attr() 메서드를 실행하는 것을 볼 수 있습니다. 즉, 클래스에 따라 같은 이름의 메서드를 사용하여 다른 논리를 구현하는 다형성을 사용한 것입니다.
shape = Shape("Shape", 500)
circle = Circle("Circle", 700, 400)
square = Square("Square", 500, 4)
shape.display_shape_attr()
print("------------------------------------")
circle.display_shape_attr()
print("------------------------------------")
square.display_shape_attr()
Output:
The shape name is Shape
The shape area is 500
------------------------------------
The shape name is Circle
The shape area is 700
The radius of the circle is 400
------------------------------------
The shape name is Square
The shape area is 500
Total number of vertices in a square 4
'프로그래밍 언어 > 파이썬 (Python)' 카테고리의 다른 글
[파이썬 학습] 오버로딩과 오버라이딩 (0) | 2022.02.14 |
---|---|
[파이썬 학습] 클래스 상속 관계 (0) | 2022.02.13 |
[파이썬 학습] 클래스 상속 (0) | 2022.02.11 |
[파이썬 학습] 객체 지향 프로그래밍 (0) | 2022.02.10 |
[파이썬 학습] 모듈 (0) | 2022.02.09 |