类型提示__call __()magic method-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

类型提示__call __()magic method

2019-01-22 11:33:11 1318 1

我使用一个简单但功能强大的类,它充当数据库表,内置过滤器方法。这是它的一小部分。

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中的错误?

取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:12

    问题似乎是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上测试过。

    0 0
相关问答

0

回答

阿里云的数据库系统怎么升级更新的www.zgysffm.com怎么加快访问速度?

2022-07-28 16:25:23 133浏览量 回答数 0

1

回答

关于任务运行一定时间后,physical内存超出,container被kill,导致任务重启怎么办?

2021-12-02 15:17:34 437浏览量 回答数 1

1

回答

Task Container 被Kill, Managed memory使用情况查看有问题?

2021-12-02 14:09:35 575浏览量 回答数 1

2

回答

阿里云的C6与C6e有什么区别?

2021-02-09 21:12:27 740浏览量 回答数 2

0

回答

bound method IETab.title of <rpa4.app.ie.IETab obj

2020-10-19 10:12:46 302浏览量 回答数 0

2

回答

阿里云ECS Linux服务器用Putty进行SSH连接超时(Network error:Conection timed out)

2018-11-15 21:39:10 8597浏览量 回答数 2

2

回答

在Mac上面就是添加不了阿里云的邮箱怎么办?

2016-07-19 23:11:56 5218浏览量 回答数 2

1

回答

linux下yum install mod_ssl –y 出错

2016-07-13 11:35:22 3592浏览量 回答数 1

1

回答

在sae上部署php代码medoo报错,求助。

2016-02-25 14:22:00 2286浏览量 回答数 1

2

回答

其它邮箱怎么代收阿里云邮箱的邮件?

2013-05-18 15:32:33 6630浏览量 回答数 2
47
文章
723
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载