반응형

다형성(Polymorphism)

다형성을 사용하면 동일한 기능을 다르게 작동시킬 수 있습니다.

예를 들어, 다음 스크립트에 있는 메소드는 두 개의 필수 매개변수 값 a b와 하나의 선택적 매개변수 c를 사용하였으며 기본값을 0으로 설정하였습니다.

 

세 개의 매개변수에 대한 값을 전달하면 세 개의 매개변수 값의 합계가 반환됩니다. 두 개의 값을 전달하면 c c 값이 할당됩니다. 매개변수 c의 값이 0이면 b에서 b를 빼고 값을 반환합니다.

 

def my_func(abc=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__(selfnamearea):

    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__(selfnamearearadius):

    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__(selfnameareavertices):

    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

 

반응형

+ Recent posts