我使用一个简单但功能强大的类,它充当数据库表,内置过滤器方法。这是它的一小部分。
PyCharm没有显示#3的类型提示。
from dataclasses import dataclass
@dataclass
class Record:
ID: int
class Table(list):
"""Like a database table.
Usage:
table = Table([Record(123), ...])
>> table.filter(123)
Record(123)
"""
def __call__(self, ID) -> Record:
return self.filter(ID)
def filter(self, ID) -> Record:
return Table(x for x in self if x.ID == ID)[0]
table = Table([Record(123)])
table[0]. # 1. This works. ".ID" Pops up after typing the period.
table.filter(123). # 2. This works too.
table(123). # 3. Crickets :-(. Nothing pops up after typing the period.
我做错了什么或者这是PyCharm中的错误?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题似乎是Table子类list。如果我们实现所需的容器方法Table而不是子类化,list那么自动完成按预期工作,例如:
from dataclasses import dataclass
@dataclass
class Record:
ID: int
class Table:
def __init__(self, items):
...
def __getitem__(self, ID) -> Record:
...
def __call__(self, ID) -> Record:
return self.filter(ID)
def filter(self, ID) -> Record:
return Table(x for x in self if x.ID == ID)[0]
table = Table([Record(123)])
table[0]. # works
table.filter(123). # works
table(123). # works
我在PyCharm Professional 2018.3.2上测试过。
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)