Frage

Ich habe diesen Code:

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

Und dieser Code:

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

Aus meiner Python Wissen, würde ich sagen, dass datetime setattr / getattr außer Kraft gesetzt, aber ich bin nicht sicher. Könnten Sie etwas Licht hier vergießen?

EDIT: Ich bin nicht besonders interessiert an datetime. Ich habe mich gefragt, über Objekte im Allgemeinen.

War es hilfreich?

Lösung

Meine Vermutung ist, dass die Umsetzung von Datetime verwendet __slots__ für eine bessere Leistung .

Wenn __slots__ Verwendung des Interpreters Reserve Speicher nur für die Attribute aufgelistet, sonst nichts. Dies ergibt eine bessere Leistung und weniger Speicher, aber es bedeutet auch, Sie keine neuen Attribute nach Belieben hinzufügen können.

Lesen Sie mehr hier: http://docs.python.org/reference/datamodel.html

Andere Tipps

Es ist geschrieben in C

http://svn.python.org/ view / python / trunk / Module / datetimemodule.c? view = Markup

Es scheint nicht setattr zu implementieren.

Während die Frage bereits beantwortet worden ist; wenn jemand Interesse an einer Vermeidung des Problems ist, hier ist ein Beispiel -

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top