2010-12-14 2 views
7

Tôi tự hỏi liệu có thể thêm trường vào đối tượng một cách linh hoạt hay không. Ví dụ, tôi muốn có thể để thêm một cái gì đó như:Python: Thêm trường vào đối tượng động

user = object() 
user.first_name = 'John' 
user.last_name = 'Smith' 

Khi tôi thực hiện điều đó bằng Python dòng lệnh thông dịch tôi nhận được:

AttributeError: 'object' object has no attribute 'first_name' 

Bất kỳ ý tưởng?

Trả lời

14

Hãy thử điều này:

class Object: 
    pass 

obj = Object() 
obj.x = 5 
+0

Cảm ơn, mà làm việc cho tôi. Tôi có hai câu hỏi 1) Từ khóa 'pass' có ý nghĩa gì ở đây? 2) Nếu tôi có một thể hiện obj2 của Object() trong mã của tôi, sẽ obj.x tạo obj2.x (với một số giá trị không xác định)? – Rafid

+1

1) Về 'pass': http://docs.python.org/tutorial/controlflow.html#pass-statements 2) Không, khi bạn làm' obj.x = 5', bạn chỉ thêm thuộc tính 'x' vào ví dụ đơn lẻ của 'Object'. Nếu bạn muốn tất cả các cá thể 'Object' chia sẻ x, bạn phải làm' Object.x = 5'. – gruszczy

+0

Không có điều gì như một giá trị không xác định trong Python - gần nhất nó nhận được là 'None'. Các đối tượng được tạo theo cách mà gruszczy đề xuất không có bất kỳ loại "nguyên mẫu" nào; bạn có thể thêm và xóa các thuộc tính theo ý muốn, và nó không ảnh hưởng đến bất kỳ cá thể nào khác của lớp Object. –

5

Bạn không thể gán cho các thuộc tính của object trường hợp như thế này. Có nguồn gốc từ object và sử dụng một thể hiện của lớp đó.