문제:
다음 코드를 사용하여 메서드 오버로딩을 구현하려고 합니다.
<code class="python">class A: def stackoverflow(self): print('first method') def stackoverflow(self, i): print('second method', i) ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Error: Takes exactly 2 arguments (1 given)</code>
해결책:
메서드 재정의와 달리 메서드 오버로드는 Python에서 기본적으로 지원되지 않습니다. 따라서 이를 다르게 구현해야 합니다.
<code class="python">class A: def stackoverflow(self, i='some_default_value'): print('only method') ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Output: only method</code>
i 매개변수에 대한 기본 인수 값을 지정하면 단일 함수가 두 시나리오를 모두 처리할 수 있습니다. 이 접근 방식은 제공된 인수 수에 따라 함수를 효과적으로 오버로드합니다.
추가 탐색:
Python 3.4에서는 functools.singledispatch 데코레이터를 사용하여 단일 디스패치 일반 함수를 도입했습니다.
<code class="python">from functools import singledispatch @singledispatch def fun(arg, verbose=False): if verbose: print("Let me just say, ", end=" ") print(arg) @fun.register(int) def _(arg, verbose=False): if verbose: print("Strength in numbers, eh?", end=" ") print(arg) @fun.register(list) def _(arg, verbose=False): if verbose: print("Enumerate this:") for i, elem in enumerate(arg): print(i, elem)</code>
이는 다양한 인수 유형에 대한 메서드 오버로드를 정의하는 보다 명시적인 방법을 제공합니다.
위 내용은 Python에서 메서드 오버로딩을 구현할 수 있으며 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!