Tôi đã suy nghĩ về cách tôi viết các lớp bằng Python. Cụ thể hơn cách constructor được triển khai thực hiện và cách đối tượng bị phá hủy. Tôi không muốn dựa vào tính toán tham chiếu của CPython để làm sạch đối tượng. Điều này về cơ bản cho tôi biết tôi nên sử dụng các câu lệnh để quản lý thời gian sống của đối tượng và tôi cần một phương thức đóng/hủy rõ ràng (phương pháp này có thể được gọi từ __exit__
nếu đối tượng cũng là người quản lý ngữ cảnh).Có thực sự OK để làm đối tượng đóng/xử lý trong __del__?
class Foo(object):
def __init__(self):
pass
def close(self):
pass
Bây giờ, nếu tất cả các đối tượng của tôi cư xử theo cách này và tất cả các mã của tôi sử dụng với những tuyên bố hay các cuộc gọi rõ ràng để close()
(hoặc dispose()
) Tôi không thực sự thấy cần phải cho tôi để đặt bất kỳ mã trong __del__
. Chúng ta có nên sử dụng __del__
để vứt bỏ các vật thể của mình không?
Tôi không muốn dựa vào tính toán tham chiếu của CPython để làm sạch đối tượng. Tại sao trên trái đất không? Có gì sai với tính toán tham chiếu đối tượng? –
@ S.Lott, tính tham chiếu không có ở đó nếu bạn di chuyển mã của mình sang môi trường có bộ sưu tập rác cao cấp hơn, chẳng hạn như Jython hoặc IronPython - và nếu CPython một ngày (ví dụ: thông qua Unladen Swallow) bị kéo và la hét vào thế kỷ 21? Tôi đồng ý với OP về "không dựa vào" RC trong các thư viện di động có thể tái sử dụng của tôi (trái ngược với sử dụng một lần, bỏ đi, các kịch bản và các mô-đun nhỏ). –
@ S.Lott: Alex đã trả lời câu hỏi của bạn. Một lý do tốt khác cho việc muốn không dựa vào việc đếm tham chiếu là JIT sắp ra khỏi dự án PyPy. Những người đứng đằng sau nó có vẻ như là te lạc quan rằng nó sẽ có thể cung cấp up up tốc độ substatial so với CPython. – Arlaharen