A generic function được gửi dựa trên loại của tất cả các đối số của nó. Lập trình viên định nghĩa một số hiện thực của một hàm. Giá trị đúng được chọn vào thời gian gọi dựa trên các loại đối số của nó. Điều này rất hữu ích cho việc thích nghi đối tượng trong số những thứ khác. Python có một vài chức năng chung bao gồm len()
.Triển khai hàm chung chung được duy trì tốt nhất cho Python là gì?
Những gói có xu hướng để cho phép mã mà trông như thế này:
@when(int)
def dumbexample(a):
return a * 2
@when(list)
def dumbexample(a):
return [("%s" % i) for i in a]
dumbexample(1) # calls first implementation
dumbexample([1,2,3]) # calls second implementation
Một ví dụ ít câm Tôi đã suy nghĩ về thời gian gần đây sẽ là một thành phần web mà đòi hỏi phải có một tài khoản. Thay vì yêu cầu một khuôn khổ web cụ thể, trình tích hợp sẽ chỉ cần viết một cái gì đó như:
class WebComponentUserAdapter(object):
def __init__(self, guest):
self.guest = guest
def canDoSomething(self):
return guest.member_of("something_group")
@when(my.webframework.User)
componentNeedsAUser(user):
return WebComponentUserAdapter(user)
Python có một vài triển khai chức năng chung. Tại sao tôi lại chọn một trong những người khác? Cách triển khai đó được sử dụng trong các ứng dụng như thế nào?
Tôi quen thuộc với zope.component.queryAdapter(object, ISomething)
của Zope. Lập trình viên đăng ký một bộ điều hợp có thể gọi mà lấy một lớp đối tượng cụ thể làm đối số của nó và trả về một cái gì đó tương thích với giao diện. Đó là một cách hữu ích để cho phép các plugin. Không giống như đắp vá khỉ, nó hoạt động ngay cả khi một đối tượng cần phải thích nghi với nhiều giao diện với cùng một tên phương thức.
Hàm 'len' chỉ đơn giản gọi phương thức' __len__' của đối tượng. Đây có phải là ý bạn của hàm "chung" không? Nếu có, có rất ít chức năng hoạt động như thế này. Bạn có cái gì khác trong tâm trí? Nếu vậy, hãy chọn một ví dụ tốt hơn. –
Bạn đang nói về đa hình? Hay bạn đang nói về các loại khỉ hiện có đang vá để thêm tính đa hình? –
nó có vẻ như (dựa trên? Và các liên kết wikipedia cung cấp) joeforker đang tìm kiếm để thực hiện các chức năng quá tải. Tôi tin rằng anh ấy đang đề cập đến "chung chung" theo nghĩa là hàm được gọi bằng 1 tên nhưng thực thi mã khác dựa trên các tham số được truyền. Như vậy: my_function (a) -> thực hiện function_a my_function (b) -> thực hiện function_b Đó là một thực hiện nhiều phong cách của phân tích cú pháp ** kwargs để có được mà mã để thực hiện – Mark