で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はmippinyproxyしかなく、dictではありません。しかしもっと重要なことに、Cのインスタンスには '__dict__'がありません – Oz123