Domanda

Ho questo codice:

>>> class G:
...   def __init__(self):
...     self.x = 20
...
>>> gg = G()
>>> gg.x
20
>>> gg.y = 2000

E questo codice:

>>> from datetime import datetime
>>> my_obj = datetime.now()
>>> my_obj.interesting = 1
*** AttributeError: 'datetime.datetime' object has no attribute 'interesting'

Per quanto ne so di Python, direi che datetime ignora setattr / getattr , ma non ne sono sicuro. Potresti far luce un po 'qui?

EDIT: non sono particolarmente interessato a datetime . Mi chiedevo degli oggetti in generale.

È stato utile?

Soluzione

Suppongo che l'implementazione di datetime utilizzi __slots__ per prestazioni migliori .

Quando si utilizza __slots__ , l'interprete riserva l'archiviazione solo per gli attributi elencati, nient'altro. Ciò offre prestazioni migliori e utilizza meno spazio di archiviazione, ma significa anche che non è possibile aggiungere nuovi attributi a piacimento.

Ulteriori informazioni qui: http://docs.python.org/reference/datamodel.html

Altri suggerimenti

Mentre alla domanda è già stata data una risposta; se qualcuno è interessato a una soluzione alternativa, ecco un esempio -

mydate = datetime.date(2013, 3, 26)
mydate.special = 'Some special date annotation'  # doesn't work
...
class CustomDate(datetime.date):
    pass
mydate = datetime.date(2013, 3, 26)
mydate = CustomDate(mydate.year, mydate.month, mydate.day)
mydate.special = 'Some special date annotation'  # works
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top