Ich schreibe eine Metaklasse, die Klassenattribute liest und speichert sie in einer Liste, aber ich möchte die Liste (cls.columns), um die Erklärung zu respektieren (dh: mycol2
, mycol3
, zut
, cool
, menfin
, a
in meinem Beispiel):Wie können Klassenattribute in der angegebenen Reihenfolge gelesen werden?
import inspect
import pprint
class Column(object):
pass
class ListingMeta(type):
def __new__(meta, classname, bases, classDict):
cls = type.__new__(meta, classname, bases, classDict)
cls.columns = inspect.getmembers(cls, lambda o: isinstance(o, Column))
cls.nb_columns = len(cls.columns)
return cls
class Listing(object):
__metaclass__ = ListingMeta
mycol2 = Column()
mycol3 = Column()
zut = Column()
cool = Column()
menfin = Column()
a = Column()
pprint.pprint(Listing.columns)
Ergebnis:
[('a', <__main__.Column object at 0xb7449d2c>),
('cool', <__main__.Column object at 0xb7449aac>),
('menfin', <__main__.Column object at 0xb7449a8c>),
('mycol2', <__main__.Column object at 0xb73a3b4c>),
('mycol3', <__main__.Column object at 0xb744914c>),
('zut', <__main__.Column object at 0xb74490cc>)]
dieser Hinsicht nicht die Deklaration der Reihenfolge der Column()
Attribute für Listing
Klasse. Wenn ich classDict
direkt benutze, hilft es auch nicht.
Wie kann ich fortfahren? Hier
ich Sie sie ohne irgendeine Art von Source-Level-Analyse, um bekommen nicht denken. In jedem Fall soll die Reihenfolge weitgehend irrelevant sein. Die 'dict' Hashes per Schlüssel, weshalb Sie es nicht in der Reihenfolge sehen – Robert
Überhaupt eine sehr konstruktive Frage. danke – pylover
kannst du auf tosca widget 2 schauen, um herauszufinden, wie das geht – pylover