How do I create an “optional” argument in Python?
我正在编写一个名为"bag"的简单python类:
1 2 3 4 5 6 7 8 9 | class Bag: def __init__(self, items=None): if self.items == None: self.items = defaultdict() else: temp_dict = defaultdict() for key in self.items: temp_dict[key] += 1 self.items = temp_dict |
变量项接受对象列表,例如:
1 | ['d','a','b','d','c','b','d'] |
号
从这里,"def uu init_uuu(self,items=none)"将:
例如,这应该有效:
1 | b = Bag() |
缺少参数应该很好,因为默认情况下,项被设置为"无"。
但是,这始终会引发异常(来自检查错误的脚本):
1 | *Error: b = Bag() raised exception AttributeError: 'Bag' object has no attribute 'items' |
。
我希望初始化bag(),而不将传递参数放入项中。
希望一切都清楚,如果不清楚告诉我。
有什么想法或者代码有什么问题吗?
事实上,你是这样做的。在构造器中,在对
我认为这是一个打字错误,你指的是
不过,这段代码可以简化。我的看法:
1 2 3 4 5 6 7 8 | import collections # Batteries included. ... def __init__(self, items=None): if not items: # Covers both None and empty list. self.items = {} else: self.items = collections.Counter(items) |
号
这甚至可以简化:
1 2 | ... self.items = collections.Counter(items or []) |
如果您严格希望a使用
1 | self.items = collections.defauldict(int, collections.Counter(items or [])) |
。
(注意,没有争论的
1 2 3 4 5 6 7 8 9 10 11 12 13 | from collections import defaultdict class Bag(object): def __init__(self, items=None): self.items = items or list() if not self.items: self.items = defaultdict() else: temp_dict = defaultdict() for key in self.items: temp_dict[key] += 1 self.items = temp_dict |
我做了一些修正:
1)创建