[英]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.