我try 制作这个类列表,当我调用len(类)时,它返回2而不是0.

我进行了调试,发现ARR的缺省值是2个非打印项目. 我不知道正确的术语,但这是代码.

Class Cars:

    def __init__(self, arr=[]): # arr has len of 2 for some reason
        self.Cars = arr
        self.size = len(arr)

    def __len__(self):
        return self.size

电话:

my_cars = Cars()
len(class) # == 2

推荐答案

这是因为您以错误的方式声明了默认列表.当您将默认列表声明为参数时,每次调用函数时都将使用相同的列表,它不会像您预期的那样创建新的列表.

这里有一篇文章更详细地解释了这一点Common Python Cotchas.

因此,声明默认列表或任何可变对象的正确方式如下所示:

def __init__(self, arr=None):
    if arr is None:
        arr = []
    self.Class = arr
    self.size = len(arr)

这样,您就可以在每次如预期那样调用函数时创建一个新列表.

Python相关问答推荐

使用Curses for Python保存和恢复终端窗口内容

这家einsum运营在做什么?E = NP.einsum(aj,kl-il,A,B)

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

Python中的负前瞻性regex遇到麻烦

jit JAX函数中的迭代器

@Property方法上的inspect.getmembers出现意外行为,引发异常

'discord.ext. commanders.cog没有属性监听器'

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何制作10,000年及以后的日期时间对象?

如何列举Pandigital Prime Set

Python虚拟环境的轻量级使用

对象的`__call__`方法的setattr在Python中不起作用'

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如何更改groupby作用域以找到满足掩码条件的第一个值?

如何使regex代码只适用于空的目标单元格

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

OpenCV轮廓.很难找到给定图像的所需轮廓

交替字符串位置的正则表达式