Questo codice produce un'uscita diversa in Python 2
e Python 3
.I descrittori Python non funzionano in Python 2.7
class Descriptor(object):
def __get__(self, instance, owner):
print('read')
return 1
def __set__(self, instance, value):
print('write')
def __delete__(self, instance):
print('del')
class C():
a = Descriptor()
c = C()
c.a
c.a = 3
del c.a
c.a
print('finished')
L'uscita per Python 2 è:
read
read
finished
Per Python 3 è:
read
write
del
read
finished
Perché questo funziona in questo modo? In che modo i descrittori Python 2
sono diversi dai descrittori Python 3
?
Questo rende anche non ha senso, perché http://docs.python.org/release/3.0.1/reference/datamodel.html#invoking-descriptors descrive chiaramente esattamente lo stesso di http://docs.python.org/reference/datamodel.html#invoking-descriptors
(Queste sono le documentazioni per Python 2.7
e Python 3.0
.)
(BTW, Python 3.0 e la relativa documentazione sono obsolete e in pensione, non utilizzare Python 3.0 o 3.0.1 La documentazione attuali sono a http: //. Docs. python.org/py3k/ e la versione corrente è 3.2.3.) –