Tôi đang triển khai một đối tượng gần giống với một tập hợp, nhưng yêu cầu một biến cá thể bổ sung, vì vậy tôi đang phân lớp đối tượng được cài đặt sẵn. Cách tốt nhất để đảm bảo rằng giá trị của biến này được sao chép khi một trong các đối tượng của tôi được sao chép là gì?Cách chính xác (hoặc tốt nhất) để phân lớp lớp Python là gì, thêm một biến cá thể mới?
Sử dụng mô-đun bộ cũ, đoạn code sau làm việc một cách hoàn hảo:
import sets
class Fooset(sets.Set):
def __init__(self, s = []):
sets.Set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
nhưng điều này không làm việc bằng cách sử dụng built-in module bộ.
Giải pháp duy nhất mà tôi có thể thấy là ghi đè mọi phương thức trả về đối tượng được sao chép ... trong trường hợp này tôi cũng có thể không làm phiền phân lớp đối tượng đã đặt. Chắc chắn có một cách tiêu chuẩn để làm điều này?
(Để làm rõ, các mã sau đây không không làm việc (sự khẳng định thất bại):
class Fooset(set):
def __init__(self, s = []):
set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
)
đó là một đóng góp hữu ích, cảm ơn. nó không giống như bạn đang đạt được nhiều bằng cách làm cho _wrap_methods một phương thức lớp chứ không phải là một hàm - đó là hoàn toàn cho mô đun mà nó mang lại? – rog
Điều này thực sự tuyệt vời, cảm ơn sự đóng góp sâu sắc! – bjd2385