Дескрипторы Python не работают в Python 2.7

Этот код выдает разные выходные данные в 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.)

5
задан Dave Halter 12 June 2012 в 23:40
поделиться