Python에서는 C와 같은 언어처럼 메소드 오버로딩 개념을 직접적으로 지원하지 않습니다. 그러나 런타임 시 인수 유형에 따라 함수를 디스패치할 수 있는 "다중 디스패치"라는 유사한 기술이 있습니다.
multipledispatch 패키지는 Python은 다중 디스패치 기능을 구현하는 방법을 제공합니다. 특정 인수 유형으로 함수를 등록할 수 있으므로 런타임 시 동적으로 선택할 수 있습니다.
multipledispatch 패키지를 사용하면 동일한 이름으로 여러 함수를 정의하고 다른 인수를 지정할 수 있습니다. 유형 조합:
from multipledispatch import dispatch from collections import namedtuple from types import LambdaType Sprite = namedtuple('Sprite', ['name']) Point = namedtuple('Point', ['x', 'y']) Curve = namedtuple('Curve', ['x', 'y', 'z']) Vector = namedtuple('Vector', ['x','y','z']) @dispatch(Sprite, Point, Vector, int) def add_bullet(sprite, start, direction, speed): print("Called Version 1") @dispatch(Sprite, Point, Point, int, float) def add_bullet(sprite, start, headto, speed, acceleration): print("Called version 2") @dispatch(Sprite, LambdaType) def add_bullet(sprite, script): print("Called version 3") @dispatch(Sprite, Curve, int) def add_bullet(sprite, curve, speed): print("Called version 4")
등록된 기능을 사용하려면 원하는 기능을 호출하기만 하면 됩니다. 적절한 인수 유형을 사용하는 함수:
sprite = Sprite('Turtle') start = Point(1,2) direction = Vector(1,1,1) speed = 100 #km/h acceleration = 5.0 #m/s**2 script = lambda sprite: sprite.x * 2 curve = Curve(3, 1, 4) headto = Point(100, 100) # somewhere far away add_bullet(sprite, start, direction, speed) add_bullet(sprite, start, headto, speed, acceleration) add_bullet(sprite, script) add_bullet(sprite, curve, speed)
이 접근 방식은 Python에서 오버로드로 인한 단점을 피하면서 다양한 인수 조합으로 함수를 생성할 수 있는 유연성을 제공합니다.
위 내용은 Python은 메소드 오버로딩과 같은 동작을 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!