[英]Python - func with namedtuple that returns value based on key as func arg
[英]Python Typing: Make python func return value type based on input func arguments
我有一個 func,它形成了某些類實例的列表,所以可以說它的輸出類型是list[SomeClass]
。
輸出類類型可能因數據而異(因此它可能是list[ClassA]
、 list[ClassB]
、 list[ClassC]
等)。
我試圖將該列表傳遞給另一個類,並將 lambda 函數作為參數。 后一個類的目的是根據該 lambda 函數將其列表參數划分為兩個單獨的列表。 所以基本上我需要的是:
def func_A(cls_instance: some_cls) -> list[some_cls]:
.....
.....
return list[some_cls]
class DividerClass()
def __init__(list_of_classes: list[Object], func: Callable):
self.list_of_classes = list_of_classes
self.result_list_1 = []
self.result_list_2 = []
def divide():
for item in self.list_of_classes:
if func(item):
self.result_list_1.append(item)
else:
self.result_list_2.append(item)
return self.result_list_1, self.result_list_2
if __name__ == '__main__':
list_1 = func_A(SomeClass()) -> list[SomeClass]
list_2 = func_A(YetAnotherClass()) -> list[YetAnotherClass]
result_1_a, result_1_b = DividerClass(list_1, lambda_func).divide() -> tuple[list[SomeClass],list[SomeClass]]
resule_2_a, result_2_b = DividerClass(list_2, lambda_func).divide() -> tuple[list[YetAnotherClass],list[YetAnotherClass]]
但不是得到像這樣的輸出:
-> tuple[list[SomeClass],list[SomeClass]]
-> tuple[list[YetAnotherClass],list[YetAnotherClass]]
我有這樣的輸出:
-> tuple[list, list]
-> tuple[list, list]
所以問題是如何讓編譯器/IDE 知道列表中類的類型並根據輸入參數輸出 classList 類型?
使用typing.Generic
指定將在各種簽名中使用任意但固定的類型。
就像是
from typing import TypeVar, Tuple, Generic
T = TypeVar('T')
def func_A(cls_instance: T) -> list[T]:
...
class DividerClass(Generic[T])
def __init__(self, list_of_classes: list[T], func: Callable[[T],list[T]]):
self.list_of_classes = list_of_classes
self.result_list_1 = []
self.result_list_2 = []
self.func = func
def divide(self) -> Tuple[list[T], list[T]]:
for item in self.list_of_classes:
if func(item):
self.result_list_1.append(item)
else:
self.result_list_2.append(item)
return self.result_list_1, self.result_list_2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.