2010-12-14 37 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 đó.

Các vấn đề liên quan