Này, tôi mới bắt đầu băn khoăn về điều này khi tôi xuất hiện một mã dự kiến một đối tượng với một tập hợp các thuộc tính nhất định (nhưng không có đặc tả nào về loại đối tượng này).Cách ngắn nhất để tạo một đối tượng với các thuộc tính tùy ý trong Python?
Một giải pháp là tạo một lớp mới có các thuộc tính mà mã mong đợi, nhưng khi tôi gọi mã khác cũng cần các đối tượng có thuộc tính (khác), tôi phải tạo nhiều lớp hơn.
Một giải pháp ngắn hơn là tạo một lớp chung, và sau đó đặt thuộc tính về trường hợp của nó (đối với những người nghĩ đến việc sử dụng thể hiện object
thay vì tạo lớp mới, sẽ không hoạt động kể từ object
trường hợp không không cho phép các thuộc tính mới).
Các giải pháp cuối cùng, ngắn nhất tôi đã đưa ra là tạo ra một lớp với một constructor mà mất đối số từ khóa, giống như các nhà xây dựng dict
, và sau đó đặt chúng như thuộc tính:
class data:
def __init__(self, **kw):
for name in kw:
setattr(self, name, kw[name])
options = data(do_good_stuff=True, do_bad_stuff=False)
Nhưng tôi có thể' t giúp cảm thấy như tôi đã bỏ lỡ một cái gì đó hiển nhiên ... Không có một cách tích hợp để làm điều này (tốt nhất là hỗ trợ trong Python 2.5)?
Mọi người sử dụng Python (ngoại trừ một số goofballs viết stdlib) tên lớp học của họ với các từ viết hoa, giúp mọi người nhận ra tên nào đại diện. Ngoài ra, đó là một thói quen tốt để luôn kế thừa từ 'đối tượng', do đó bạn đang sử dụng * các lớp kiểu mới *. –
Vâng, tôi muốn lớp trông giống như một kiểu dữ liệu vì nó không có chức năng lớp (đó cũng là lý do tôi cố ý không sử dụng các lớp kiểu mới vì tôi không sử dụng cho thứ tự phân giải phương thức, v.v.) có lẽ nên có tên viết hoa, bạn nói đúng. – Blixt