English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 다중 형성, 다양한 타입의 다중 형성, 그리고 예제를 통해 Python에서 이를 구현하는 방법을 배웁니다.
다중 형성의 본래 의미는 다른 형태로 나타나는 조건을 말합니다.
다중 형성은 프로그래밍에서 매우 중요한 개념입니다. 이는 단일 타입 엔티티(메서드, 연산자, 객체)를 사용하여 다양한 상황에서 다른 타입을 나타내는 것을 의미합니다.
예를 들어
우리는 알고 있습니다 + 연산자는 Python 프로그램에서 널리 사용되지만, 단일 사용법이 없습니다.
정수 데이터 타입에 대해서는 + 연산자로 수학적 더하기 연산을 수행합니다.
num1 = 1 num2 = 2 print(num1+num2)
따라서, 이 프로그램의 출력은 3
동일하게, 문자열 데이터 타입에 대해서는 + 연산자로 연결됩니다.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
결과적으로, 이 프로그램의 출력은 : Python 프로그래밍
여기서는 연산자 + 다양한 데이터 타입에 대해 다른 작업을 수행합니다. 이는 Python에서 가장 간단한 다중 형성 현상 중 하나입니다.
Python에는 다양한 데이터 타입과 호환되는 몇 가지 함수가 있습니다.
이러한 함수 중 하나는 len() 함수입니다. 이 함수는 Python에서 다양한 데이터 타입과 함께 실행될 수 있습니다. 이 함수의 몇 가지 예제를 보겠습니다.
print(len("w3codebox")) print(len(["Python", "Java", "C"])) print(len({"Name": "John", "Address": "Nepal"}))
출력 결과
5 3 2
여기서, 많은 데이터 타입(예: 문자열, 리스트, 튜플, 집합 및 딕셔너리 등)이 len() 함수를 사용할 수 있음을 볼 수 있습니다. 그러나 특정 데이터 타입에 대한 특정 정보를 반환할 수 있습니다.
객체 지향 프로그래밍에서 다형성은 매우 중요한 개념입니다.
Python의 OOP에 대해 더 알고 싶다면 다음을 방문하세요:Python面向对象编程
클래스 메서드를 생성할 때, 다형성 개념을 사용할 수 있습니다. 왜냐하면 Python은 다른 클래스가同名의 메서드를 가질 수 있기 때문입니다.
그런 다음, 호출 중인 객체를 무시하고 이러한 메서드를 일반화할 수 있습니다. 예를 들어 보겠습니다:
class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"저는 고양이입니다. 제 이름은 {self.name}입니다. 저는 {self.age}세입니다.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"저는 개입니다. 제 이름은 {self.name}입니다. 저는 {self.age}세입니다.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound()
출력 결과
Meow 저는 고양이입니다. 제 이름은 Kitty입니다. 저는 2.5 세. Meow Bark 저는 개입니다. 제 이름은 Fluffy입니다. 저는 4 세. Bark
여기서, 우리는 두 개의 클래스 Cat과 Dog를 생성했습니다. 그들은 유사한 구조를 가지고 있으며, info()와 make_sound()와 같은同名 메서드를 가지고 있습니다.
하지만, 주의하세요. 우리는 공통의 부모 클래스를 만들거나 이러한 클래스를 어떤 방식으로든 연결한 것은 아닙니다. 그럼에도 불구하고, 두 개의 다른 객체를 튜플에 넣어 공통의 animal 변수를 사용하여 이터레이션할 수 있습니다. 다형성 덕분에 이는 허용됩니다.
다른 프로그래밍 언어와 마찬가지로, Python의 서브 클래스는 부모 클래스에서 메서드와 속성을 상속받습니다. 특정 서브 클래스에 대해 메서드와 속성을 다시 정의할 수 있으며, 이를Method Overriding(메서드 재정의)。
다형성은 부모 클래스와同名의 이러한 오버라이딩 메서드와 속성에 접근할 수 있게 합니다。
예를 들어 보겠습니다:
from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "저는 두차원의 형상입니다." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "사각형의 각각은"90도." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area())
출력 결과
Circle 저는 두차원의 형상입니다. 사각형의 각각은90도. 153.93804002589985
여기서, 부모 클래스에서 사용된 __str__()와 같은 자식 클래스에서 재정의되지 않은 메서드를 볼 수 있습니다.
다중 상태성 때문에 파이썬 해석기는 객체 a(Square 클래스)의 fact() 메서드가 재정의되었다고 자동으로 인식합니다. 그것은 자식 클래스에서 정의된 것을 사용합니다.
그리고, 객체 b의 fact() 메서드가 재정의되지 않았기 때문에 Parent Shape 클래스에서 사용할 수 있습니다.
주의:메서드 오버로드이는 파이썬에서 동일한 이름을 가진 다른 매개변수를 가진 메서드를 생성할 수 없는 방법입니다.