Pregunta

Tengo este código:

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

Y este código:

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

Por mi conocimiento de Python, diría que datetime anula setattr / getattr , pero no estoy seguro. ¿Podrías arrojar algo de luz aquí?

EDITAR: No estoy específicamente interesado en datetime . Me preguntaba acerca de los objetos en general.

¿Fue útil?

Solución

Mi conjetura es que la implementación de datetime utiliza __slots__ para un mejor rendimiento .

Al usar __slots__ , el intérprete reserva el almacenamiento para los atributos enumerados, nada más. Esto proporciona un mejor rendimiento y utiliza menos almacenamiento, pero también significa que no puede agregar nuevos atributos a voluntad.

Lea más aquí: http://docs.python.org/reference/datamodel.html

Otros consejos

Mientras que la pregunta ya ha sido contestada; Si alguien está interesado en una solución, aquí hay un ejemplo:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top