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?
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.
Tôi là một lập trình viên xuất sắc, rất giỏi!