Python 当直接在类上调用描述符时,为什么描述符变得无效?
在学习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
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()
。对不起,输入错误-它完全改变了我的陈述对不起,这是一个打字错误。。。我的意思是使用=