cuốn sách gpt4 ai đã làm

Python ghi đè __str__ bên ngoài định nghĩa lớp

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:52:49 32 4
mua khóa gpt4 Nike

Giả sử tôi có một mô-đun đã nhập hoạt động tốt nhưng không cung cấp tốt __str__ phương pháp, tôi muốn thêm một.

Trong một số ngôn ngữ hỗn hợp:

từ nhập foo Foo

Foo.prototype._str__ = hàm myNIcePrintFunction(){

}

Làm cách nào tôi có thể làm điều này bằng Python?

câu trả lời hay nhất

Bạn có thể xác định một hàm trước rồi sau đó vá nó.

喜欢:

def foostr(tự):
trả về 'A foo str'

Foo.__str__ = foostr

或者使用biểu thức lambda:

Foo.__str__ = lambda self: 'Một foo str khác'

Tuy nhiên, phương pháp này có điểm khác Foo.__str__.__name__ Đợi đã, nhưng có một sự khác biệt nhỏ. Nhưng str(..) Các chức năng tích hợp sẽ hoạt động như mong đợi. BẰNG @chepner Đã nói rằng, chúng ta có thể sử dụng công cụ chức năng TRONG bọc chức năng bảo tồn hầu hết siêu dữ liệu:

từ gói nhập khẩu functools

def foostr(tự):
trả về 'A foo str'

Foo.__str__ = kết thúc(Foo.__str__)(foostr)

Nhưng Foo.__str__.__qualname__ sẽ dẫn đến ví dụ 'superfoo.__str__'(siêu thực đượcnhận ra __str__ của Foo Thứ tự giải quyết phương pháp (MRO).

Ví dụ:

>>> lớp Foo:
...vượt qua
...
>>> str(Foo())
'<__main__.Foo đối tượng tại 0x7f807046e668>'
>>> Foo.__str__ = lambda self: 'một Foo str khác'
>>> str(Foo())
'một Foo str khác'

Nếu bạn có quyền truy cập Foo triển khai lớp thì tốt nhất chỉ định nghĩa một lớp trong lớp __str__ chức năng thay vìvá khỉ Sẽ giải quyết nó sau.

Về việc Python ghi đè __str__ bên ngoài định nghĩa lớp, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/52681456/

32 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress