Python jest dostarczany z przydatną funkcją dir()
, która zawiera listę treści klasy dla ciebie. Na przykład, dla tej klasy:Jak powtórzyć atrybuty klasy, w kolejności, w jakiej zostały zdefiniowane?
class C:
i = 1
a = 'b'
dir(C)
wróci
['__doc__', '__module__', 'a', 'i']
To jest wielki, ale zauważ, jak kolejność 'a'
i 'i'
jest teraz inna niż kolejność zostały one zdefiniowane w
Jak mogę powtórzyć atrybuty C (potencjalnie ignorując wbudowane atrybuty modułu &) w kolejności, w jakiej zostały zdefiniowane? Dla powyższej klasy C będzie to 'i'
, a następnie 'a'
.
Dodatek: - Pracuję nad kodem do serializacji/rejestrowania, w którym chcę serializować atrybuty w kolejności, w jakiej zostały zdefiniowane, tak aby dane wyjściowe były podobne do kodu, który utworzył klasę.
Dlaczego zamówienie w ogóle zostało zdefiniowane? Zamówienie nie ma znaczenia w tym przypadku. Jak wykorzystasz te informacje, jeśli możesz je zdobyć? –
Czy serializujesz klasę lub wystąpienia klasy? W twoim przykładzie "a" i "i" są atrybutami klas. Jeśli masz na myśli atrybuty instancji, powinieneś zdefiniować je w '__init__' używając' self.a = 'b'' i 'self.i = 1'. – PaulMcG
Są to atrybuty na poziomie klasy, które nie są tak użyteczne, jak zmienne instancji. Dlaczego starasz się zachować kolejność atrybutów klasowych? Czy nie byłoby lepiej zachować kolejność zmiennych instancji?Dlaczego próbujesz robić sztuczki ze zmiennymi na poziomie klasy? –