我正在实现一个包含2d numpy数组(self.data
)的python类,我已经使用字符串键设置了列访问权限。
密钥包含在将名称映射到列索引的字典中(例如,self.coldict={'col0':0,...,'colN':N}
),并且我已经定义了
def __getitem__(self,key):
if isinstance(key,str):
return self.data[:,self.coldict[key]]
elif isinstance(key,int):
return self.data[:,key]
这适用于列检索。
我希望能够使用tab完成键,以便我可以输入
在iPython会话期间myObject['c+TAB
获取完成选项。
我认为解决方案应该依赖于readline或prompt_toolkit,但是我不清楚如何在不覆盖iPython中已经活动的功能的情况下实现完成函数。
非常感谢任何帮助。 谢谢!
答案 0 :(得分:1)
我不确定您是否可以为__getitem__
标签填写字符串。制表符完成通常用于对象属性。选项卡完成使用__dict__
实例字典和__dir__(self)
方法中定义的项目。
如果您希望通过标签完成来访问属性。
class MyArray:
...
def __dir__(self):
return super().__dir__() + list(self.coldict.keys())
def __getattr__(self, name):
if name in self.coldict:
return self.data[:,self.coldict[name]]
return super().__getattr__(name)
然后,您将使用
访问您的列arr = MyArray() # My numpy array
print(arr.col0) # col0 should allow for tab complete.
答案 1 :(得分:0)