2010-05-05 20 views
5

Tôi có một lớp python và tôi cần phải thêm một số tùy ý các danh sách dài tùy ý vào nó. Tên của các danh sách tôi cần thêm cũng tùy ý. Ví dụ: trong PHP, tôi sẽ làm điều này:Thêm các trường có tên biến đổi vào các lớp Python

class MyClass { 

} 

$c = new MyClass(); 
$n = "hello" 
$c.$n = array(1, 2, 3); 

Làm cách nào để làm điều này bằng Python?

Tôi cũng tự hỏi liệu đây có phải là điều hợp lý để làm hay không. Việc thay thế sẽ là tạo ra một dict của danh sách trong lớp, nhưng vì số lượng và kích thước của các danh sách là tùy ý, tôi đã lo lắng có thể có một hit hiệu suất từ ​​này.

Nếu bạn đang tự hỏi những gì tôi đang cố gắng hoàn thành, tôi đang viết một thông dịch viên script siêu nhẹ. Trình thông dịch đi qua một danh sách do con người viết và tạo ra một số loại mã byte. Mã byte của mỗi hàm sẽ được lưu trữ dưới dạng danh sách được đặt tên theo hàm trong lớp "ứng dụng". Tôi rất tò mò muốn nghe bất kỳ đề xuất nào khác về cách thực hiện điều này.

Trả lời

5

Sử dụng setattr.

>>> class A(object): 
...  pass 
... 
>>> a = A() 
>>> f = 'field' 
>>> setattr(a, f, 42) 
>>> a.field 
42 
1

Tôi sẽ viết nó theo cách đơn giản nhất hiện tại và tiếp theo, sau đó xem để tối ưu hóa các yếu tố cụ thể.

Hãy nhớ nguyên tắc KISS.

+0

Đồng ý, cảm ơn bạn –

+0

lol, chắc chắn, nhưng tôi chỉ muốn làm rõ, có vẻ như bạn vẫn đang trong giai đoạn mơ, vì vậy tôi sẽ đợi cho đến khi bạn có một nguyên mẫu làm việc vì điều này nghe như một tối ưu hóa cụ thể. Danh sách dict là tốt. – jcolebrand

+0

Tôi có một số lớp mô phỏng và tôi đang dần điền chúng ra. Tôi đã ở giai đoạn mà tôi đã tìm ra cách giữ dữ liệu được biên dịch của một tập lệnh. Nhưng thực sự, cho đến nay tôi đã thực hiện nhiều suy nghĩ và mơ ước hơn mã, bởi vì có chủ đề liên quan và tôi đang cố gắng không để thổi chân của tôi tắt :) –

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