Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Đó là quá tải phương thức, không ghi đè phương thức. Và trong Python, trong lịch sử bạn làm tất cả trong một chức năng:

class A:
    def stackoverflow(self, i='some_default_value'):
        print 'only method'

ob=A()
ob.stackoverflow(2)
ob.stackoverflow()

Xem phần Giá trị đối số mặc định của hướng dẫn Python. Xem "Ít kinh ngạc nhất" và đối số mặc định có thể thay đổi cho một sai lầm phổ biến cần tránh.

Xem PEP 443 để biết thông tin về các chức năng chung của Dispatch được thêm vào trong Python 3.4:

>>> 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)

Đã trả lời ngày 18 tháng 4 năm 2012 lúc 4:53Apr 18, 2012 at 4:53

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Agfagfagf

164K40 Huy hiệu vàng279 Huy hiệu bạc232 Huy hiệu Đồng40 gold badges279 silver badges232 bronze badges

19

Bạn cũng có thể sử dụng pythonlangutil:

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i

Đã trả lời ngày 26 tháng 4 năm 2015 lúc 12:11Apr 26, 2015 at 12:11

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

12

Mặc dù AGF đã đúng với câu trả lời trong quá khứ, trước 3,4, bây giờ với PEP-3124, chúng tôi đã có đường cú pháp.

Xem tài liệu gõ để biết chi tiết về trang trí

>>> 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)
9, nhưng lưu ý rằng đây thực sự chỉ là đường cú pháp và IMHO Đây là tất cả mọi người đã tranh luận kể từ đó.

Về mặt, tôi đồng ý rằng việc có nhiều hàm với các chữ ký khác nhau làm cho nó dễ đọc hơn sau đó có một hàm duy nhất với hơn 20 đối số được đặt thành giá trị mặc định (

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
0 hầu hết thời gian) và sau đó phải tìm cách sử dụng vô tận
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
1,
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
2,
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
3 Các chuỗi để tìm hiểu những gì người gọi thực sự muốn chức năng của chúng tôi làm với tập hợp các đối số được cung cấp. Điều này đã quá hạn sau khi Python Zen:

Đẹp tốt hơn xấu.

và cũng được cho là

Đơn giản là tốt hơn phức tạp.

Trực tiếp từ tài liệu Python chính thức được liên kết ở trên:

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    

Chỉnh sửa: Đối với bất kỳ ai tự hỏi tại sao ví dụ này không hoạt động như bạn mong đợi nếu từ các ngôn ngữ khác mà tôi đề nghị sẽ xem xét cuộc thảo luận này. Các chức năng

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
4 không được cho là có bất kỳ triển khai thực tế nào. Điều này không rõ ràng từ ví dụ trong tài liệu Python.

SMCI

30.7K18 Huy hiệu vàng110 Huy hiệu bạc145 Huy hiệu đồng18 gold badges110 silver badges145 bronze badges

Đã trả lời ngày 23 tháng 9 năm 2018 lúc 16:27Sep 23, 2018 at 16:27

Omniomniomni

3.7147 Huy hiệu vàng46 Huy hiệu bạc65 Huy hiệu Đồng7 gold badges46 silver badges65 bronze badges

3

Trong Python, bạn không làm những việc như vậy. Khi mọi người làm điều đó bằng các ngôn ngữ như Java, họ thường muốn có giá trị mặc định (nếu không, họ thường muốn một phương thức có tên khác). Vì vậy, trong Python, bạn có thể có các giá trị mặc định.

class A(object):  # Remember the ``object`` bit when working in Python 2.x

    def stackoverflow(self, i=None):
        if i is None:
            print 'first form'
        else:
            print 'second form'

Như bạn có thể thấy, bạn có thể sử dụng điều này để kích hoạt hành vi riêng biệt thay vì chỉ có giá trị mặc định.

>>> ob = A()
>>> ob.stackoverflow()
first form
>>> ob.stackoverflow(2)
second form

Đã trả lời ngày 18 tháng 4 năm 2012 lúc 4:55Apr 18, 2012 at 4:55

Chris Morganchris MorganChris Morgan

81.6K22 Huy hiệu vàng200 Huy hiệu bạc208 Huy hiệu đồng22 gold badges200 silver badges208 bronze badges

5

Bạn không thể, không bao giờ cần và không thực sự muốn.

Trong Python, mọi thứ đều là một đối tượng. Các lớp học là những thứ, vì vậy chúng là đối tượng. Các phương pháp cũng vậy.

Có một đối tượng gọi là

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
5 là một lớp. Nó có một thuộc tính gọi là
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
6. Nó chỉ có thể có một thuộc tính như vậy.

Khi bạn viết

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
7, điều xảy ra là bạn tạo một đối tượng là phương thức và gán nó cho thuộc tính
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
6 của
from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
5. Nếu bạn viết hai định nghĩa, định nghĩa thứ hai thay thế thứ nhất, giống như cách chuyển nhượng luôn luôn hành xử.

Hơn nữa, bạn không muốn viết mã mà sự hoang dã của các loại thứ mà quá tải đôi khi được sử dụng. Đó không phải là cách ngôn ngữ hoạt động.

Thay vì cố gắng xác định một chức năng riêng cho từng loại điều bạn có thể được cung cấp (điều này không có ý nghĩa gì vì bạn không chỉ định các loại cho các tham số chức năng), hãy ngừng lo lắng về những gì và bắt đầu nghĩ về những gì chúng có thể làm.are and start thinking about what they can do.

Bạn không chỉ không thể viết một cái riêng để xử lý một tuple so với danh sách mà còn không muốn hoặc cần.don't want or need to.

Tất cả những gì bạn làm là tận dụng thực tế là cả hai, ví dụ, có thể lặp lại (tức là bạn có thể viết

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
0). (Thực tế là chúng không liên quan trực tiếp bởi thừa kế là không liên quan.)

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

BGSE

8.0342 Huy hiệu vàng38 Huy hiệu bạc39 Huy hiệu Đồng2 gold badges38 silver badges39 bronze badges

Đã trả lời ngày 18 tháng 4 năm 2012 lúc 6:24Apr 18, 2012 at 6:24

Karl Knechtelkarl KnechtelKarl Knechtel

59.3k9 Huy hiệu vàng86 Huy hiệu bạc130 Huy hiệu đồng9 gold badges86 silver badges130 bronze badges

5

Tôi nghĩ rằng từ bạn đang tìm kiếm là "quá tải". Không có bất kỳ phương pháp quá tải trong Python. Tuy nhiên, bạn có thể sử dụng các đối số mặc định, như sau.

def stackoverflow(self, i=None):
    if i != None:
        print 'second method', i
    else:
        print 'first method'

Khi bạn vượt qua nó một đối số, nó sẽ tuân theo logic của điều kiện đầu tiên và thực hiện câu lệnh in đầu tiên. Khi bạn vượt qua nó không có đối số, nó sẽ đi vào điều kiện

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i
3 và thực hiện câu lệnh in thứ hai.

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Đã trả lời ngày 18 tháng 4 năm 2012 lúc 4:54Apr 18, 2012 at 4:54

Mayhewrmayhewrmayhewr

Phù hiệu vàng 3.9831 Huy hiệu bạc15 Huy hiệu đồng1 gold badge17 silver badges15 bronze badges

Tôi viết câu trả lời của mình trong Python 3.2.1.

def overload(*functions):
    return lambda *args, **kwargs: functions[len(args)](*args, **kwargs)

Làm thế nào nó hoạt động:

  1. from typing import overload
    @overload
    def process(response: None) -> None:
        ...
    @overload
    def process(response: int) -> Tuple[int, str]:
        ...
    @overload
    def process(response: bytes) -> str:
        ...
    def process(response):
        
    
    2 lấy bất kỳ số lượng thiết bị gọi nào và lưu trữ chúng trong Tuple
    from typing import overload
    @overload
    def process(response: None) -> None:
        ...
    @overload
    def process(response: int) -> Tuple[int, str]:
        ...
    @overload
    def process(response: bytes) -> str:
        ...
    def process(response):
        
    
    3, sau đó trả lại Lambda.
  2. Lambda có bất kỳ số lượng đối số nào, sau đó trả về kết quả của chức năng gọi được lưu trữ trong
    from typing import overload
    @overload
    def process(response: None) -> None:
        ...
    @overload
    def process(response: int) -> Tuple[int, str]:
        ...
    @overload
    def process(response: bytes) -> str:
        ...
    def process(response):
        
    
    4 được gọi với các đối số được truyền cho Lambda.

Usage:

class A:
    stackoverflow=overload(                    \
        None, \ 
        #there is always a self argument, so this should never get called
        lambda self: print('First method'),      \
        lambda self, i: print('Second method', i) \
    )

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Seyfi

1.6901 Huy hiệu vàng18 Huy hiệu bạc33 Huy hiệu đồng1 gold badge18 silver badges33 bronze badges

Đã trả lời ngày 24 tháng 10 năm 2014 lúc 19:07Oct 24, 2014 at 19:07

GingerplusplusgingerplusplusGingerPlusPlus

5.0821 Huy hiệu vàng28 Huy hiệu bạc51 Huy hiệu đồng1 gold badge28 silver badges51 bronze badges

0

Tôi viết câu trả lời của mình trong Python 2.7:

Trong Python, quá tải phương pháp là không thể; Nếu bạn thực sự muốn truy cập cùng một chức năng với các tính năng khác nhau, tôi khuyên bạn nên đi để ghi đè phương thức.

class Base(): # Base class
    '''def add(self,a,b):
        s=a+b
        print s'''

    def add(self,a,b,c):
        self.a=a
        self.b=b
        self.c=c

        sum =a+b+c
        print sum

class Derived(Base): # Derived class
    def add(self,a,b): # overriding method
        sum=a+b
        print sum



add_fun_1=Base() #instance creation for Base class
add_fun_2=Derived()#instance creation for Derived class

add_fun_1.add(4,2,5) # function with 3 arguments
add_fun_2.add(4,2)   # function with 2 arguments

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Benjamin W.

41.1K16 Huy hiệu vàng100 Huy hiệu bạc107 Huy hiệu đồng16 gold badges100 silver badges107 bronze badges

Đã trả lời ngày 15 tháng 7 năm 2015 lúc 7:00Jul 15, 2015 at 7:00

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

0

Trong Python, quá tải không phải là một khái niệm được áp dụng. Tuy nhiên, nếu bạn đang cố gắng tạo một trường hợp, ví dụ, bạn muốn một trình khởi tạo được thực hiện nếu được thông qua một đối số loại

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
5 và một trình khởi tạo khác cho một đối số loại
from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
6 sau đó, vì mọi thứ trong Python đều được xử lý là đối tượng, bạn Có thể kiểm tra tên của loại lớp của đối tượng đã truyền và ghi xử lý có điều kiện dựa trên đó.

>>> 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)
0

Khái niệm này có thể được áp dụng cho nhiều kịch bản khác nhau thông qua các phương pháp khác nhau khi cần thiết.

Đã trả lời ngày 26 tháng 9 năm 2016 lúc 21:30Sep 26, 2016 at 21:30

S. Gamgees. GamgeeS. Gamgee

4815 Huy hiệu bạc16 Huy hiệu đồng5 silver badges16 bronze badges

Trong Python, bạn sẽ làm điều này với một đối số mặc định.

>>> 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)
1

Đã trả lời ngày 18 tháng 4 năm 2012 lúc 4:55Apr 18, 2012 at 4:55

John Gaines Jr.John Gaines Jr.John Gaines Jr.

10,8K1 Huy hiệu vàng25 Huy hiệu bạc25 Huy hiệu đồng1 gold badge25 silver badges25 bronze badges

Python không hỗ trợ quá tải phương thức như Java hoặc C ++. Chúng tôi có thể quá tải các phương thức, nhưng chúng tôi chỉ có thể sử dụng phương thức được xác định mới nhất.

>>> 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)
2

Chúng ta cần cung cấp các đối số tùy chọn hoặc *Args để cung cấp một số lượng đối số khác nhau khi gọi.

Phép lịch sự Python | Phương pháp quá tải

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Đã trả lời ngày 28 tháng 5 năm 2018 lúc 19:53May 28, 2018 at 19:53

AtihskaatihskaAtihska

4.32710 Huy hiệu vàng48 Huy hiệu bạc89 Huy hiệu đồng10 gold badges48 silver badges89 bronze badges

1

Tôi chỉ bắt gặp quá tải.py (chức năng quá tải cho Python 3) cho bất kỳ ai có thể quan tâm.

Từ tệp readme của kho lưu trữ được liên kết:

Quá tải là một mô -đun cung cấp phân phối chức năng dựa trên các loại và số lượng đối số thời gian chạy.

Khi một hàm bị quá tải được gọi, người điều phối sẽ so sánh các đối số được cung cấp với chữ ký chức năng có sẵn và gọi việc thực hiện cung cấp phù hợp chính xác nhất.

Đặc trưng

Xác thực chức năng khi đăng ký và quy tắc giải quyết chi tiết đảm bảo một kết quả duy nhất, được xác định rõ ràng trong thời gian chạy. Thực hiện bộ nhớ đệm giải quyết chức năng cho hiệu suất tuyệt vời. Hỗ trợ các tham số tùy chọn (giá trị mặc định) trong chữ ký chức năng. Đánh giá cả đối số vị trí và từ khóa khi giải quyết phù hợp nhất. Hỗ trợ các chức năng dự phòng và thực thi mã được chia sẻ. Hỗ trợ đa hình đối số. Hỗ trợ các lớp và kế thừa, bao gồm các lớp và staticmethods.

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Đã trả lời ngày 6 tháng 2 năm 2015 lúc 20:51Feb 6, 2015 at 20:51

Python 3.x bao gồm thư viện gõ tiêu chuẩn cho phép quá tải phương thức với việc sử dụng công cụ trang trí @overload. Thật không may, điều này là để làm cho mã dễ đọc hơn, vì các phương thức trang trí @OverLoad sẽ cần phải được theo sau bởi một phương pháp không được trang trí để xử lý các đối số khác nhau. Nhiều hơn có thể được tìm thấy ở đây ở đây nhưng ví dụ của bạn:

>>> 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)
3

Đã trả lời ngày 10 tháng 10 năm 2018 lúc 15:26Oct 10, 2018 at 15:26

Nickyfotnickyfotnickyfot

1.79216 huy hiệu bạc24 Huy hiệu đồng16 silver badges24 bronze badges

1

Python đã thêm bộ trang trí @Overload với PEP -3124 để cung cấp đường cú pháp để quá tải thông qua kiểm tra loại - thay vì chỉ làm việc với việc ghi đè.

Mã ví dụ về quá tải qua @Overload từ PEP-3124

>>> 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)
4

được chuyển đổi bởi @overload-Decorator thành:

>>> 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)
5

Đã trả lời ngày 21 tháng 6 năm 2020 lúc 5:02Jun 21, 2020 at 5:02

NEXNEXNex

4201 Huy hiệu vàng4 Huy hiệu bạc17 Huy hiệu đồng1 gold badge4 silver badges17 bronze badges

1

Trong tệp mathmethod.py:

>>> 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)
6

Trong tệp chính.

>>> 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)
7

Chúng ta có thể quá tải phương thức bằng cách sử dụng MultipleSpatch.

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Đã trả lời ngày 23 tháng 4 năm 2018 lúc 8:46Apr 23, 2018 at 8:46

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

2

Có một số thư viện giúp điều này dễ dàng:

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
7 - Nếu bạn chỉ cần đối số đầu tiên, hãy sử dụng
from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
8

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    
9 - Tính năng quá tải phương thức/chức năng phong phú.

class A(object):  # Remember the ``object`` bit when working in Python 2.x

    def stackoverflow(self, i=None):
        if i is None:
            print 'first form'
        else:
            print 'second form'
0 - Thay thế cho
class A(object):  # Remember the ``object`` bit when working in Python 2.x

    def stackoverflow(self, i=None):
        if i is None:
            print 'first form'
        else:
            print 'second form'
1 ít tính năng nhưng nhẹ.

Đã trả lời ngày 1 tháng 6 lúc 16:14Jun 1 at 16:14

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Python 3.5 đã thêm mô -đun gõ. Điều này bao gồm một công cụ trang trí quá tải.

Mục đích của người trang trí này để giúp gõ người kiểm tra. Về mặt chức năng của nó chỉ là gõ vịt.

>>> 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)
8

Điều này dẫn đến thông tin loại sau trong mã VS:

Hướng dẫn does python support method overloading - python có hỗ trợ quá tải phương thức không

Và trong khi điều này có thể giúp ích, lưu ý rằng điều này thêm rất nhiều cú pháp mới "kỳ lạ". Mục đích của nó - hoàn toàn là gợi ý loại - không rõ ràng ngay lập tức.

Đi với sự kết hợp của các loại thường là một lựa chọn tốt hơn.

Đã trả lời 1 giờ trước1 hour ago

felix-htfelix-htfelix-ht

1.28013 huy hiệu bạc15 huy hiệu đồng13 silver badges15 bronze badges

Tại sao Python không hỗ trợ quá tải phương thức?

Khi thời gian chạy gặp một chức năng khác có cùng tên, nó sẽ cập nhật mục nhập trong không gian tên cục bộ và do đó loại bỏ khả năng của hai chức năng cùng tồn tại.Do đó Python không hỗ trợ quá tải chức năng.. Hence python does not support Function overloading.

Liệu Python có hỗ trợ phương thức quá tải và ghi đè không?

Lưu ý: Python không hỗ trợ quá tải phương thức.Chúng tôi có thể quá tải các phương thức nhưng chỉ có thể sử dụng phương thức được xác định mới nhất.Python does not support method overloading. We may overload the methods but can only use the latest defined method.

Làm thế nào phương pháp quá tải hoạt động trong Python?

Quá tải phương thức là một phương tiện mà bạn có thể gọi cùng một phương thức theo các cách khác nhau, tức là với các tham số khác nhau dựa trên số lượng đối số hoặc các kiểu dữ liệu khác nhau của chúng.Giống như chúng tôi đã làm ở trên, chúng tôi gọi cùng một hàm, mul với số lượng tham số khác nhau.a means by which you can call the same method in different ways, i.e. with different parameters based on the number of arguments or their different datatypes. Just like we did above, we call the same function, Mul with different number of parameters.