我想成为其中有槽优化一类能够使用Python描述:使用Python描述与插槽
class C(object):
__slots__ = ['a']
a = MyDescriptor('a')
def __init__(self, val):
self.a = val
我的问题是如何实现的描述符类,以便能够存储调用描述符对象的类实例中的值。通常的解决方案看起来像下面的一个,但由于“字典”,将无法正常工作时,“槽”中的C级调用不再定义:
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
执行后,我可以看到'C .__ dict__'被创建。这不是我们想要避免的吗?无论如何,查看文档'__slots__'已经在使用描述符接口来实现它自己的目的,所以这可能会非常困难。 – dhill
使用Python 3,C只有一个mappinyproxy而不是字典。更重要的是,C的实例没有'__dict__' – Oz123