gpt4 book ai didi

python - 使用带槽的 Python 描述符

转载 作者:太空狗 更新时间:2023-10-29 20:16:15 25 4
gpt4 key购买 nike

我希望能够在具有槽优化的类中使用 python 描述符:

class C(object):    
__slots__ = ['a']
a = MyDescriptor('a')
def __init__(self, val):
self.a = val

我遇到的问题是如何实现描述符类,以便能够将值存储在调用描述符对象的类实例中。通常的解决方案如下所示,但不会起作用,因为在 C 类中调用“slots”时不再定义“dict”:

class MyDescriptor(object):
__slots__ = ['name']
def __init__(self, name_):
self.name = name_
def __get__(self, instance, owner):
if self.name not in instance.__dict__:
raise AttributeError, self.name
return instance.__dict__[self.name]
def __set__(self, instance, value):
instance.__dict__[self.name] = value

最佳答案

不要声明与槽和实例方法相同的名称。使用不同的名称,并将插槽作为属性访问,而不是通过 __dict__

class MyDescriptor(object):
__slots__ = ['name']
def __init__(self, name_):
self.name = name_
def __get__(self, instance, owner):
return getattr(instance, self.name)
def __set__(self, instance, value):
setattr(instance, self.name, value)

class C(object):
__slots__ = ['_a']
a = MyDescriptor('_a')
def __init__(self, val):
self.a = val

foo = C(1)
print foo.a
foo.a = 2
print foo.a

关于python - 使用带槽的 Python 描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912499/

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