Come posso ottenere tutti i nomi di proprietà di una classe python comprese quelle proprietà ereditate dalle super classi?Come accedere alle proprietà delle super classi Python, ad es. via __class __.__ dict__?
class A(object):
def getX(self):
return "X"
x = property(getX)
a = A()
a.x
'X'
class B(A):
y = 10
b = B()
b.x
'X'
a.__class__.__dict__.items()
[('__module__', '__main__'), ('getX', <function getX at 0xf05500>), ('__dict__', <attribute '__dict__' of 'A' objects>), ('x', <property object at 0x114bba8>), ('__weakref__', <attribute '__weakref__' of 'A' objects>), ('__doc__', None)]
b.__class__.__dict__.items()
[('y', 10), ('__module__', '__main__'), ('__doc__', None)]
Come accedere alle proprietà di una via b? Bisogno: "Dammi un elenco di tutti i proprietà nomi da b compresi quelli ereditati da un!"
>>> [q for q in a.__class__.__dict__.items() if type(q[1]) == property]
[('x', <property object at 0x114bba8>)]
>>> [q for q in b.__class__.__dict__.items() if type(q[1]) == property]
[]
voglio ottenere risultati del primo (a), quando si lavora con la seconda (b), ma corrente solo può ottenere una lista vuota. Questo dovrebbe funzionare anche per un altro C ereditato da B.
si noti che 'y' non è una proprietà , è solo un numero intero. Vuoi tutte le variabili di classe che non sono forse funzioni? –
Invece di avere 'getX', avere' get_x' se ti interessa lo stile Python ([PEP 8] (http://www.python.org/dev/peps/pep-0008/)), o se non lo fai Devo essere in grado di fare la funzione chiamata versione (lo farai se mai andrai ad impostare una proprietà tramite 'super()' --- 'super (...). x = 'Y'' fallirà), usa 'property' come decoratore, come' @ property', 'def x (self): return 'X''. –
Grazie per questi commenti. Ho provato a creare un semplice esempio al posto del mio codice complesso e sì, non ho quindi pensato a PEP8. Non mi interessa per questo, perché ho solo bisogno delle proprietà. – user1156548