【问题标题】:python __getattr__ autocompletionpython __getattr__ 自动补全
【发布时间】:2017-10-25 00:40:51
【问题描述】:

__getattr__ 可用于定义对象的属性。例如。以下代码将返回'bar'

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

为了让生活更轻松,我希望能够在 ipython 中输入t.,然后用制表符完成属性名称。我似乎无法找到如何做到这一点,而这似乎是可能的。例如。在 ipython 中运行以下代码

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

键入df. 和制表符完成允许选择foo 选项。我在它的代码中找不到 pandas 是如何做到这一点的,所以我在这里问。我应该在我的 Test 类中添加什么以使制表符完成工作?

【问题讨论】:

  • 我相信不是pandas 这样做,而是ipython 使自己适应已知的类。也许他们有一个 API,也许他们不提供扩展。
  • 如果这是真的,ipython 会检查 df 以找到它的列,对吗?我希望有一些类似于 __attrs__ 属性的东西,其中包含有效属性列表。
  • 如果是这样,那么可能会有答案;但这也可能是对已知类的特定扫描,它是不同的并且取决于类。

标签: python autocomplete attributes tab-completion


【解决方案1】:

您可以使用__dir__ 方法实现此目的。 下面是一个包含 DataFrame 的类的示例

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

【讨论】:

  • 谢谢我有同样的问题,它解决了!这应该是一个公认的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2020-05-20
  • 2015-12-04
  • 2010-11-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多