【问题标题】:Generating a List Class in Python在 Python 中生成列表类
【发布时间】:2010-04-20 14:34:25
【问题描述】:

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

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

class Test:
    def  __init__(self,test):
        self.__test = test

我的问题是,如果我进入

t = Test([1,3,5])

一切都会很好,但如果我添加

t = Test()

我收到一个错误,我没有输入足够的参数。

我试过添加

def __init__(self,test=[])

作为默认参数,哪种方法有效,但我没有唯一列表。

我一直在寻找,但我无法完全弄清楚我做错了什么。任何帮助将不胜感激。

【问题讨论】:

标签: python list


【解决方案1】:

我不确定您要查找的内容,但您可能希望使用 None 作为默认值:

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

【讨论】:

  • 你的两个分支有点不平衡。要么在is None 分支中分配给self.__test,要么只在if 之后进行分配而不使用else
  • 这是我遇到问题的地方,我尝试了类似的方法,但没有使用“无”作为测试的默认值。这修复了我的程序。非常感谢大家的帮助和额外的阅读!
  • 仅供参考:就个人而言,我更喜欢 Thomas Wouters 的回答。
【解决方案2】:

您可以使用以下成语:

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

【讨论】:

  • @Thomas Wouters:我想有些人可能会有这种感觉。这就是为什么我保留我的答案。
  • 我不确定“糟糕,三元表达式”有什么不清楚的地方。我不喜欢那里使用三元表达式。 (或者,事实上,任何地方。)
  • @Thomas,所以您没有在答案中使用它。我觉得它完全合适且可读。
  • 我同意它是完全可读的,我认为这是一个不赞成投票的糟糕理由。
  • 代码的可读性对我来说很重要,所以我确实投了反对票——我发现另一个答案(那不是我的)更好。幸运的是,意见分歧是我们拥有像 stackoverflow 这样的网站的原因。
【解决方案3】:

默认参数在定义函数时计算一次,所以当你这样做时:

def __init__(self, test=[]):

“测试”列表在所有未指定 test 参数的 __init__ 调用之间共享。你想要的通常是这样表达的:

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

这会为每个调用创建一个新列表,其中 test 未传递参数(或者当它传递 None 时,显然。)

【讨论】:

  • 感谢您的解释,我知道这就是发生的事情,我只是不知道缓解该问题的正确方法。非常感谢!
猜你喜欢
  • 2011-05-24
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多