Python __getattr__ автозаполнение

__getattr__ может использоваться для определения атрибутов объектов. Например, следующий код вернется 'bar',

class Test(object):
    def __getattr__(self, key):
        if key == 'foo':
            return 'bar'
t = Test()
t.foo

Чтобы сделать жизнь немного проще, я хотел бы иметь возможность печатать t. в ipython, а затем завершите вкладку имени атрибута. Кажется, я не могу найти, как это можно сделать, хотя это кажется возможным. Например, запустите следующий код в ipython

import pandas
df = pandas.DataFrame(data={'foo': ('bar',)})

Typing df. а табуляция позволяет выбрать foo вариант. Я не мог найти, как pandas делает это в своем коде, поэтому я спрашиваю здесь. Что я должен добавить к своему Test класс такой, что таб-завершение будет работать?

1 ответ

Вы можете достичь этого с __dir__ метод. ниже приведен пример для класса, который содержит DataFrame

def __dir__(self):
    return self.df.keys()
Другие вопросы по тегам