Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中生成列表类_Python_List - Fatal编程技术网

在Python中生成列表类

在Python中生成列表类,python,list,Python,List,我在用Python为类生成列表时遇到一些问题。我知道有些简单的事情我忽略了,但我就是想不出来 到目前为止,我的基本代码是: class Test: def __init__(self,test): self.__test = test 我的问题是如果我进去 t = Test([1,3,5]) 事情会很顺利,但如果我补充 t = Test() 我得到一个错误,我没有输入足够的参数 我试着加上 def __init__(self,test=[]) 作为默认参数,哪种

我在用Python为类生成列表时遇到一些问题。我知道有些简单的事情我忽略了,但我就是想不出来

到目前为止,我的基本代码是:

class Test:
    def  __init__(self,test):
        self.__test = test
我的问题是如果我进去

t = Test([1,3,5])
事情会很顺利,但如果我补充

t = Test()
我得到一个错误,我没有输入足够的参数

我试着加上

def __init__(self,test=[])
作为默认参数,哪种类型有效,但我没有唯一的列表


我已经到处找了,我不太明白我做错了什么。任何帮助都将不胜感激。

我不确定您在寻找什么,但您可能希望使用
None
作为默认设置:

class Test:
    def  __init__(self,test=None):
        if test is None:
            self.__test = []
        else:
            self.__test = test

您可以使用以下习惯用法:

class Test:
    def  __init__(self,test=None):
        self.__test = test if test is not None else []

定义函数时,默认参数只计算一次,因此在执行以下操作时:

def __init__(self, test=[]):
“test”列表在对
\uuuu init\uuu
的所有调用之间共享,这些调用没有指定
test
参数。您想要的通常表示为:

def __init__(self, test=None):
    if test is None:
        test = []

这将为每个调用创建一个新的列表,其中
测试
没有传递参数(或者当它传递
时,显然是这样。)

唯一列表的含义是什么?请参见此处:由于属性使用双前导下划线名称,也许值得指出的是@Thomas Wouters:我想有些人可能会有这种感觉。这就是为什么我保留我的答案。我不确定“恶心,三元表达”有什么不清楚的地方。我不喜欢在那里使用三元表达式。(或者,事实上,在任何地方。)@Thomas,所以你在回答中没有使用它。我觉得它完全合适而且可读。我同意它的可读性很好,我认为这是一个不好的否决理由。代码的可读性对我很重要,所以我投了否决票——我发现另一个答案(不是我的)更好。幸运的是,不同的意见是为什么我们有stackoverflow这样的网站。你们的两个分支有点不平衡。要么分配给
self.\u测试
也是None
分支中的
,要么只在
if
之后分配,而没有
else
。这就是我遇到问题的地方,我尝试了类似的方法,但没有使用“None”作为测试的默认值。这就修正了我的程序。非常感谢大家的帮助和额外的阅读!仅供参考:就个人而言,我更喜欢Thomas Wouters的答案。谢谢你的解释,我知道事情就是这样发生的,我只是不知道如何缓解这个问题。我非常感激!