Python 当直接在类上调用描述符时,为什么描述符变得无效?

Python 当直接在类上调用描述符时,为什么描述符变得无效?,python,Python,在学习Python中的描述符时,我尝试了以下代码: class D(object) : def __init__(s) : s.a = '' def __get__(s, ins, own) : print 'desc get' return s.a def __set__(s, ins, val) : print 'desc set' s.a = val class C(objec

在学习Python中的描述符时,我尝试了以下代码:

class D(object) :

    def __init__(s) :
        s.a = ''

    def __get__(s, ins, own) :
        print 'desc get'
        return s.a

    def __set__(s, ins, val) :
        print 'desc set'
        s.a = val


class C(object) :
    d = D()


C.d = 'danger'
c = C()
c.d = 'some str'

为什么在执行
C.d='danger'
时,描述符会从
C.中删除?

在您的示例中,当您进行此假装
C.d='danger'
时,您正在用值'danger'覆盖描述符
C.d
不再是一个描述符,它现在是字符串“danger”。

只是一个简单的注释,在python中,我们通常使用
self
而不是
s
来表示实例(在方法中)。我想您正在寻找“classmethod属性”你的意思是如果有另一个描述符类
classnewd
,如果我说
c.d=NewD()
,那么
c.d
将是一个新的描述符。Okkk仅当您在类属性本身上执行此操作时
c.d==NewD()
调用
d.\uu设置(c.d,c,NewD())
,但是
c.d==NewD()
替换类CI的d属性无法理解您的注释。在这两个地方你都在使用
=
实际上我在前面的评论中是指
C.d=newD()
。对不起,输入错误-它完全改变了我的陈述对不起,这是一个打字错误。。。我的意思是使用
=