You are here: Partenza > Dive Into Python > Una struttura orientata agli oggetti > Attributi di classe | << >> | ||||
Dive Into PythonPython per programmatori esperti |
Conoscete già gli attributi dato, che sono variabili di una specifica istanza di una classe. Python supporta anche gli attributi di classe, che sono variabili riferite alla classe stessa.
class MP3FileInfo(FileInfo): "store ID3v1.0 MP3 tags" tagDataMap = {"title" : ( 3, 33, stripnulls), "artist" : ( 33, 63, stripnulls), "album" : ( 63, 93, stripnulls), "year" : ( 93, 97, stripnulls), "comment" : ( 97, 126, stripnulls), "genre" : (127, 128, ord)}
>>> import fileinfo >>> fileinfo.MP3FileInfo <class fileinfo.MP3FileInfo at 01257FDC> >>> fileinfo.MP3FileInfo.tagDataMap {'title': (3, 33, <function stripnulls at 0260C8D4>), 'genre': (127, 128, <built-in function ord>), 'artist': (33, 63, <function stripnulls at 0260C8D4>), 'year': (93, 97, <function stripnulls at 0260C8D4>), 'comment': (97, 126, <function stripnulls at 0260C8D4>), 'album': (63, 93, <function stripnulls at 0260C8D4>)} >>> m = fileinfo.MP3FileInfo() >>> m.tagDataMap {'title': (3, 33, <function stripnulls at 0260C8D4>), 'genre': (127, 128, <built-in function ord>), 'artist': (33, 63, <function stripnulls at 0260C8D4>), 'year': (93, 97, <function stripnulls at 0260C8D4>), 'comment': (97, 126, <function stripnulls at 0260C8D4>), 'album': (63, 93, <function stripnulls at 0260C8D4>)}
In Java, sia le variabili statiche (chiamate attributi di classe in Python) che le variabili di istanza (chiamate attributi dato in Python), sono definite immediatamente dopo la definizione della classe (il primo con la parola chiave static, il secondo senza). In Python, solo gli attributi di classe posso essere definiti così; gli attributi dato sono definiti nel metodo __init__. |
Gli attributi di classe possono essere usati come costanti a livello di classe (cioè il modo in cui li usiamo in MP3FileInfo), ma non sono realmente costanti. [4] Potete anche modificarli.
>>> class counter: ... count = 0 ... def __init__(self): ... self.__class__.count += 1 ... >>> counter <class __main__.counter at 010EAECC> >>> counter.count 0 >>> c = counter() >>> c.count 1 >>> counter.count 1 >>> d = counter() >>> d.count 2 >>> c.count 2 >>> counter.count 2
[4] Non ci sono costanti in Python. Ogni cosa può essere modificata se provate abbastanza. Questo fa parte di uno dei principali concetti di Python: cattivi comportamenti dovrebbero essere scoraggiati, ma non impediti. Se volete veramente modificare il valore di None, potete farlo, ma non venite correndo da me se il vostro codice diventa impossibile da debuggare.
<< Metodi speciali di classe avanzati |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
Funzioni private >> |