Trong Python 3.4, tôi muốn tạo một lớp con của float
- một thứ có thể được sử dụng trong các phép toán và boolean như float
, nhưng có chức năng tùy chỉnh khác và có thể nhận được đối số lúc khởi tạo điều khiển chức năng đó. (Cụ thể, tôi muốn có một tuỳ chỉnh __str__
và thông số được sử dụng trong phương pháp đó.)Python: Có thể một lớp con của float lấy thêm đối số trong hàm tạo của nó không?
Tuy nhiên, tôi dường như không thể có được một lớp con của float
để có hàm tạo hai đối số chức năng. Tại sao? Đây có phải chỉ đơn giản là một hạn chế về việc mở rộng các kiểu dựng sẵn?
Ví dụ:
class Foo(float):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Bây giờ nếu tôi cố gắng Foo(1,2)
tôi nhận được:
TypeError: float() takes at most 1 argument (2 given)
Đáng ngạc nhiên, lập luận __init__
mới của tôi được thực thi quá, vì vậy nếu tôi làm Foo(1)
tôi nhận được:
TypeError: __init__() missing 1 required positional argument: 'extra'
Thỏa thuận ở đây là gì? Tôi đã thực hiện những điều tương tự với các kiểu con của list
và đã rất ngạc nhiên khi nó không hoạt động trên float
.
Related: http://stackoverflow.com/questions/1936457/sub-classing-float-type-in- python-fail-to-catch-exception-in-init –
Không phải là câu trả lời cho câu hỏi của bạn, mà là một giải pháp cho vấn đề của bạn: http://ideone.com/nIPim9 –
Thú vị, @ Robᵩ. Có vẻ như trọng trách '__new__' có thể là cách để làm những gì tôi muốn, nhưng không chắc chắn chính xác làm thế nào để làm cho công việc đó được nêu ra. –