现在我有这个类:
class foo():
def __init__(self):
self.l = []
现在,我可以在参数中不带参数的情况下将变量设置为 foo,因为它不带参数,但是我怎样才能允许它继续不带任何必需的参数,但如果我想放入 foo() ? 例子:
>>> f = foo([1,2,3]) #would be legal and
>>> f = foo() # would be legal
def __init__(self, items=None):
if items is None: items = []
self.l = items
针对@Eastsun 的编辑,我提出了一个不同的结构__init__
def __init__(self, items=()):
''' Accepts any iterable
The appropriate TypeError will be raised if items is not iterable '''
self.l = list(items)
请注意,小写l
是一个坏名字,它可能会与1
def __init__(self, items=None):
self.l = items or []
或者
def __init__(self, items=None):
self.l = items if items else []
针对 Dougal 的评论进行编辑。
(我已经学习 Python 大约两周了,所以这只是我的个人意见。如果我错了,请纠正我。)在像 python 这样的编程语言中,很难防止有人将不需要的类型的对象传递给你的函数或方法. 在我的想法中,确保始终工作的安全方式__init__
是这样的:
def __init__(self, items = None):
if isinstance(items, Iterable):
self.l = list(items)
elif items is None:
self.l = []
else:
raise TypeError('items must be iterable')
注意:如果 items 已经是一个列表,上述方法总是做一个浅拷贝。
class foo():
def __init__(self, items=[]):
self.l = items