15

私は自分のコードで次のものを使用しています:

class Structure(dict,object):
""" A 'fancy' dictionary that provides 'MatLab' structure-like
referencing. 

"""
def __getattr__(self, attr):
    # Fake a __getstate__ method that returns None
    if attr == "__getstate__":
        return lambda: None
    return self[attr]

def __setattr__(self, attr, value):
    self[attr] = value

def set_with_dict(self, D):
    """ set attributes with a dict """
    for k in D.keys():
        self.__setattr__(k, D[k])

全体として、これは私の目的では機能しますが、タブ補完が機能するのは、属性ではなく、Structureから継承した別のカスタムクラスのメソッドのみであることに気付きました。私もこのテストを行いましたが、結果は少し奇妙だと思います。

In [2]: d = Structure()
In [3]: d.this = 'that'
In [4]: d.this
Out[4]: 'that'
In [5]: d.th<tab>
NOTHING HAPPENS

In [6]: class T():
   ...:     pass
   ...: 

In [7]: t = T()
In [8]: t.this = 'cheese'
In [9]: t.th<tab>
COMPLETES TO t.this
Out[9]: 'cheese'

タブ補完を属性に対して機能させるには、クラスに何を追加する必要がありますか?

4

1 に答える 1

22

このメソッドを追加します。

def __dir__(self):
    return self.keys()

ここを参照してください:http://ipython.org/ipython-doc/dev/config/integrating.html

そしてここに:http://docs.python.org/2/library/functions.html

于 2012-12-14T00:21:03.413 に答える