繁体   English   中英

类型提示自定义 class 可以在自定义 class 集合中迭代

[英]Type hinting a custom class that can be iterated in custom class collection

我有一个带有自定义类的自定义 class 集合,但是 typehints 对我不起作用

foo = CustomClass("abc")
bar = CustomClass("cba")

collection = CustomClassCollection([foo, bar])

for item in collection:
    item.<typehints here won't show up>

我如何在这里解决以显示迭代项目的类型提示?

这是 CustomClassCollection 迭代器方法:

def __iter__(self) -> CustomClass:
    return next(self)

CustomClassCollection 的实现:

class CustomClassCollection(KeyIndexedCollection, JsonSerializable):
    def __init__(self, items: Optional[List[CustomClass]] = None):
        super().__init__(items)
        self._collection = {}
        self._add_items_impl(self._collection, take_with_default(items, []))

    def _add_items_impl(self, dst_collection, items):
        for item in items:
            self._add_impl(dst_collection, item)

    def add(self, item: CustomClass) -> CustomClassCollection:
        return self.clone(items=[*self.items(), item])

    def add_items(self, items: List[CustomClass]) -> CustomClassCollection:
        return self.clone(items=[*self.items(), *items])

    def get(self, key: str, default: Optional[Any] = None) -> ObjClass:
        return self._collection.get(key, default)

    def __next__(self) -> CustomClass:
        yield from self._collection.values()

    def __iter__(self) -> CustomClass:
        return next(self)

    def items(self) -> List[CustomClass]:
        return list(self._collection.values())

自定义类的实现:

class CustomClass(KeyObject, JsonSerializable):
    def __init__(self, name: str):
        self._name = name

    def name(self) -> str:
        return self._name

__iter__更改为:

def __iter__(self) -> Iterator[CustomClass]:
    return next(self)

做的工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM