是否有一种方法可以在参数的类型提示中定义元组或列表的大小?
此刻我正在使用这样的东西:
from typing import List, Optional, Tuple
def function_name(self, list1: List[Class1]):
if len(list1) != 4:
raise SomeError()
pass
# some code here
我正在寻找一种更简洁的方法。
您为什么不让它接受4个论点?然后,您可以执行以下操作:
def function_name(self, a: Class1, b: Class1, c:Class1, d:Class1):
...
data = (Class1(...), Class1(...), Class1(...), Class1(...))
obj.function_name(*data)
一种方法是将签名更改为接受4个参数:
def function_name(self, c1, c2, c3, c4): # Use better parameter names
pass
然后您可以使用splat运算符使用列表来调用它:
l = [...]
x.function_name(*l)
对于列表,因为它们是动态的,所以没有意义,对于元组,定义内的类型数就是它所持有的元素数:
from typing import Tuple
example_1: Tuple[int, int] = (1, 2) # This is valid
example_2: Tuple[int, int] = (1, 2, 3) # This is invalid
example_3: Tuple[int, ...] = (1, 2, 3, 4) # This is valid, the ellipses means any number if ints
example_4: Tuple[int, ...] = (1, 'string') # This is invalid
# So in your case if you need 4 you can do something like this
My4Tuple = Tuple[Class1, Class1, Class1, Class1]
def my_function(self, arg1: My4Tuple):
pass
始终记住,这不是在运行时强制执行的