类实例可变性问题

问题描述 投票:0回答:0

我正在定义通过索引符号传递参数的类。为此,我使用

__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 ()
,但结果相同。

我错过了什么吗?

python class-method
© www.soinside.com 2019 - 2024. All rights reserved.