Tôi nhận ra câu hỏi khá giống với câu hỏi này, mặc dù không chính xác theo cách này.Có cách nào tốt để tạo một hàm tạo bản sao trong python không?
Tôi muốn có một đối số tùy chọn cho hàm tạo của lớp của tôi, nếu nó là một thể hiện của lớp của tôi, sẽ được sao chép. Ví dụ, một cái gì đó tương tự (tôi biết mã này không hoạt động!):
class Foo(object):
def __init__(self, foo=None):
self.x = None
self.y = None
self.z = None
if foo is not None and isinstance(foo, Foo):
self = copy.deepcopy(foo)
a = Foo()
a.x = 1
a.y = 2
a.z = 3
b = Foo(a)
print b.x
print b.y
print b.z
Tôi biết có một số giải pháp thực tiễn cho việc này. Tôi có thể thiết lập mỗi thuộc tính của bản thân theo giá trị của thuộc tính tương ứng của foo, nhưng điều này sẽ thực sự gây phiền nhiễu bởi vì lớp của tôi có rất nhiều thuộc tính. Hoặc tôi chỉ đơn giản có thể sử dụng:
b = copy.deepcopy(a)
... Nhưng tôi không muốn nếu điều đó là có thể. Tôi cũng hy vọng sẽ tránh ghi đè __new__
.
Có thực sự không có cách nào phong nha ở tất cả trong python để tạo ra một nhà xây dựng bản sao?
TẠI SAO không bạn muốn sử dụng b = copy.deepcopy (a)? Ý tôi là, nếu nó hoạt động, và không cần thêm bất kỳ dòng nào để viết hơn b = Foo (a) .... – DGH
Vâng, tôi cho rằng ngón tay của tôi vẫn bị gạch chéo rằng một hàm tạo bản sao là khả thi. Và thẳng thắn, tại sao phải không? Nó không giống như nó là một yêu cầu thực sự bất thường. Người ta sẽ nghĩ rằng tất cả các ngôn ngữ hướng đối tượng sẽ có tính năng này. – carmenism
Tại sao nó không phải là một tính năng? Bởi vì nó chỉ là đường cú pháp, một cách khác để nói chính xác điều tương tự. Miễn là chức năng tồn tại để tạo bản sao sâu chỉ với một dòng mã rất đơn giản, tại sao nó lại quan trọng nếu đó là "hàm tạo" hay không? – DGH