Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 键入暗示_u调用_uu()魔术方法的_Python_Python 3.x_Pycharm - Fatal编程技术网

Python 键入暗示_u调用_uu()魔术方法的

Python 键入暗示_u调用_uu()魔术方法的,python,python-3.x,pycharm,Python,Python 3.x,Pycharm,我使用了一个简单但功能强大的类,它的作用类似于数据库表,并带有一个内置的过滤器方法。这里是它的一小部分 PyCharm不显示#3的类型提示 我是做错了什么,还是这是PyCharm中的一个bug?问题似乎是表子类列表。如果我们在表上实现了所需的容器方法,而不是子类化列表,那么自动完成功能将按预期工作,例如: 从数据类导入数据类 @数据类 课堂记录: ID:int 类别表: 定义初始化(自身,项目): ... def uu getitem uu(self,ID)->记录: ... def_uuu调用

我使用了一个简单但功能强大的类,它的作用类似于数据库表,并带有一个内置的过滤器方法。这里是它的一小部分

PyCharm不显示#3的类型提示


我是做错了什么,还是这是PyCharm中的一个bug?

问题似乎是
子类
列表
。如果我们在
上实现了所需的容器方法,而不是子类化
列表
,那么自动完成功能将按预期工作,例如:

从数据类导入数据类
@数据类
课堂记录:
ID:int
类别表:
定义初始化(自身,项目):
...
def uu getitem uu(self,ID)->记录:
...
def_uuu调用(self,ID)->记录:
返回自我筛选(ID)
def过滤器(自身,ID)->记录:
返回表(如果x.ID==ID,则x代表self中的x)[0]
表=表([记录(123)])
表[0]。#作品
表.过滤器(123)作品
表(123)作品
我在PyCharm Professional 2018.3.2上进行了测试


有关模拟容器类型的其他信息,请参阅文档。

有趣。这是故意的,还是一个类型暗示错误?看起来像pycharm中的一个错误,我真的很惊讶
1。
tab完成了
Table
extends
list
而不是
list[Record]
@ChaimG我同意@AnthonySottile-它看起来像pycharm错误。也就是说,我认为这是一种边缘情况,因为自己实现容器方法比直接从
list
派生更为典型。@AnthonySottile在初始化表时使用
Table=Table([Record(123)])
#1不会自动完成。@ChrisHunt:如何键入提示自定义容器方法?
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.