Khi tìm hiểu về mô hình dữ liệu của Python, tôi đang chơi với việc tạo các đối tượng từ các đối tượng hiện có bằng cách sử dụng phương thức __new__
. Dưới đây là một số ví dụ mà tạo ra các đối tượng mới các loại:Đối tượng Python từ các đối tượng hiện có bằng cách sử dụng __new__
x = 2; print type(x).__new__(x.__class__)
x = {}; print type(x).__new__(x.__class__)
x = [1,2]; print type(x).__new__(x.__class__)
x = 2.34; print type(x).__new__(x.__class__)
x = '13'; print type(x).__new__(x.__class__)
x = 1.0j; print type(x).__new__(x.__class__)
x = True; print type(x).__new__(x.__class__)
x = (1,2); print type(x).__new__(x.__class__)
Tuy nhiên, ba thí nghiệm sau cho tôi lỗi:
x = None; print type(x).__new__(x.__class__)
x = lambda z: z**2; print type(x).__new__(x.__class__)
x = object; print type(x).__new__(x.__class__)
Các lỗi là (theo thứ tự):
TypeError: object.__new__(NoneType) is not safe, use NoneType.__new__()
TypeError: Required argument 'code' (pos 1) not found
TypeError: type() takes 1 or 3 arguments
Tại sao ba ví dụ này không hoạt động? (Lưu ý: đối với ví dụ lambda
, có vẻ như tôi phải chuyển đoạn mã khi tôi gọi phương thức __new__
nhưng tôi không biết cách thực hiện điều đó.) Tôi đang sử dụng Python 2.6. Xin lưu ý rằng tôi nhận ra điều này không nhất thiết là cách bạn muốn tạo các đối tượng mới bằng mã thực, nhưng mục đích của tôi là không thực tế, thay vào đó, nó là để hiểu cách thức các phương thức đối tượng cấp thấp hoạt động như thế nào. Các tính năng chính
Và lỗi chính xác nói gì sẽ mang lại lợi ích cho chúng tôi .. –
Đã thêm tin nhắn , Rohit. Cám ơn vì sự gợi ý. – rlandster