我正在定义通过索引符号传递参数的类。为此,我使用
__class_getitem__
方法。这是我的实现。
def __class_getitem__(cls, parameters):
if type(parameters) != tuple:
parameters = (parameters,)
if len(parameters) > 2:
raise TypeError("Expected 2 arguments: List[sub_type, max_length]")
if len(parameters):
cls.sub_type = parameters[0]
if len(parameters) > 1:
cls.max_len = parameters[1]
if cls.max_len <= 0:
raise TypeError(f"Max Length of {cls.max_len} is less than or equal to 0")
return cls
这个类实现了
List
,它可以用作List[Int, 10]
,表示一个长度为10的列表,所有的都是整数。我看到的问题是返回的cls
是可变的。
如果我实例化了两个实例:
x = List[Int,1]
y = List[Int,10]
两个类的属性
max_len
将被设置为10。我试图返回一个实例化的类,即cls ()
,但结果相同。
我错过了什么吗?