Chcę zdefiniować klasy lekkości, które mają reprezentować struktury danych. Podobnie jak w przypadku wielu struktur danych, kolejność danych jest ważna. Więc jeśli mogę śmiało określić następująco:Jak uzyskać kolejność definicji atrybutów klas w Pythonie?
class User(DataStructure):
username = StringValue()
password = StringValue()
age = IntegerValue()
Ja sugerując, że jest to struktura danych, gdzie łańcuch z nazwą użytkownika jest na pierwszym miejscu, a następnie ciąg z hasłem, a wreszcie wiek użytkownika jako Liczba całkowita.
Jeśli znasz Python, będziesz wiedzieć, że powyższa klasa, User
, jest obiektem dziedziczącym po type
. Będzie, tak jak większość innych obiektów w Pythonie, mieć __dict__
. I tu leży mój problem. Ta __dict__
jest mapą skrótu, więc kolejność atrybutów klas w __dict__
nie jest w żaden sposób powiązana z ich kolejnością definicji.
Czy mogę w jakiś sposób ustalić rzeczywistą kolejność definicji? Pytam tutaj zanim pójdę z jednym z mniej rozsądnych metod mogę myśleć ...
Oh i po prostu być jasne, co chcę jest sposobem, aby to z powyższej definicji: ['username', 'password', 'age']
odsyłającym moim rozwiązanie „mniej sane”: masz licznik, który idzie w górę za każdym razem, gdy klasa '* value' jest tworzony i ustawić nową wartość do tej instancji , następnie uporządkuj listę atrybutów według tej wartości. Można to zrobić za pomocą meta-klasy. – Blixt
Używanie metaklasy zgodnie z tym, co tu opisałeś, jest jedyną rzeczą, która podskoczyła mi do głowy. –
Cóż, licznik jest sposobem, w jaki zespół Django to zrobił, więc byłbym dość pewny, że to najlepszy sposób na zrobienie tego. –