Этот код выдает разные выходные данные в Python 2
и Python 3
.
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')
Вывод для Python 2:
read
read
finished
Для Python 3 это:
read
write
del
read
finished
Почему это так работает? Чем дескрипторы Python 2
отличаются от дескрипторов Python 3
?
Это также не имеет смысла, потому что ] http://docs.python.org/release/3.0.1/reference/datamodel.html#invoking-descriptorsчетко описывает то же самое, что и http://docs.python.org/reference/datamodel.html#invoking-descriptors
(это документация для Python 2.7
и Python 3.0
.)