gpt4 book ai didi

Python:为什么描述符不能是实例变量?

转载 作者:太空狗 更新时间:2023-10-30 02:06:06 24 4
gpt4 key购买 nike

假设我定义了这个描述符:

class MyDescriptor(object):

def __get__(self, instance, owner):
return self._value

def __set__(self, instance, value):
self._value = value

def __delete__(self, instance):
del(self._value)

我在这里使用它:

class MyClass1(object):
value = MyDescriptor()


>>> m1 = MyClass1()
>>> m1.value = 1
>>> m2 = MyClass1()
>>> m2.value = 2
>>> m1.value
2

所以 value 是一个类属性,被所有实例共享。

现在如果我定义这个:

class MyClass2(object)
value = 1

>>> y1 = MyClass2()
>>> y1.value=1
>>> y2 = MyClass2()
>>> y2.value=2
>>> y1.value
1

在这种情况下,value 是一个实例属性,不被实例共享。

为什么当value是一个描述符时它只能是一个类属性,而当value是一个简单的整数时它就变成了一个实例属性?

最佳答案

您在 MyDescriptor 的实现中忽略了 instance 参数。这就是为什么它看起来 是一个类属性。也许你想要这样的东西:

class MyDescriptor(object):

def __get__(self, instance, owner):
return instance._value

def __set__(self, instance, value):
instance._value = value

def __delete__(self, instance):
del(instance._value)

关于Python:为什么描述符不能是实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com