这段代码在Python 2和Python 3中会产生不同的输出。
Python 2的输出如下:
为什么会这样工作?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完全相同的内容。
(这些是
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
的文档。)