tôi nhập khẩu từ một CSV và nhận dữ liệu gần ở định dạngTạo thuộc tính thể hiện của lớp từ một từ điển?
{ 'Field1' : 3000, 'Field2' : 6000, 'RandomField' : 5000 }
Tên của các lĩnh vực năng động. (À, chúng năng động ở chỗ có thể có nhiều hơn Field1 và Field2, nhưng tôi biết Field1
và Field2
luôn ở đó.
Tôi muốn có thể chuyển từ điển này vào lớp học của mình . allMyFields
vì vậy mà tôi có thể truy cập các dữ liệu trên như tài sản
class allMyFields:
# I think I need to include these to allow hinting in Komodo. I think.
self.Field1 = None
self.Field2 = None
def __init__(self,dictionary):
for k,v in dictionary.items():
self.k = v
#of course, this doesn't work. I've ended up doing this instead
#self.data[k] = v
#but it's not the way I want to access the data.
q = { 'Field1' : 3000, 'Field2' : 6000, 'RandomField' : 5000 }
instance = allMyFields(q)
# Ideally I could do this.
print q.Field1
Mọi góp ý theo như lý do tại sao? - tôi muốn để có thể tận dụng lợi thế của mã gián tiếp, và nhập dữ liệu vào một từ điển được gọi là data
như tôi đã làm không đủ khả năng cho tôi.
(Vì tên biến không được giải quyết cho đến khi chạy, tôi vẫn sẽ phải ném một cái xương đến Komodo - Tôi nghĩ rằng self.Field1 = None
là đủ.)
Vậy - làm cách nào để làm những gì tôi muốn? Hay tôi đang sủa một cây không phải python được thiết kế kém?
Bạn không cần thuộc tính lớp cho gợi ý Chỉnh sửa Komodo. Nó có thể đọc một phương thức '__init__' để tìm các biến' self.'. Về cơ bản hơn, tại sao bạn không sử dụng 'csv.DictReader' đơn giản cho việc này và tạo từ điển từ mỗi hàng? –
SLott - Tôi sửa đổi tiêu đề theo cách thủ công bằng re.sub() và thêm vào tiêu đề 'giả'. Nó không phải là một lý do thực sự tốt, nhưng đổi tên chìa khóa sau khi một DictReader là rất nhiều tốn kém hơn. –