我正在尝试为一个类创建一个__init__()
函数。这是我遇到困难的一个例子。
class Names():
"""a class for storing a number of names"""
def __init__(self, names): #names can be any sequence of strings
"""takes a sequence of names and puts them into a list"""
self.name_list = []
for element in names:
self.name_list.append(element)
但是当我尝试时:
Names("John", "Bobby", "Sarah")
我收到错误消息
TypeError: init ()需要2个位置参数,但是给出了4个
有没有办法让这个工作适用于任意数量的名称,换句话说是一系列名称?
答案 0 :(得分:0)
不确定。您需要使用*
运算符来表示可变数量的参数。像这样:
class Names():
"""a class for storing a number of names"""
def __init__(self, *names): #names is can be any sequence of strings
"""takes a sequence of names and puts them into a list"""
self.name_list = list(names)
然后,您提供的许多名称将存储在name_list
中。
>>> Names("John", "Bobby", "Sarah")
<__main__.Names instance at 0x102b1c0e0>
你可以通过给类自己的__repr__
方法来解决这个问题。 E.g:
def __repr__(self):
clsname = self.__class__.__name__
namestr = ", ".join(repr(n) for n in self.name_list)
return "{0}({1})".format(clsname, namestr)
然后:
>>> Names("John", "Bobby", "Sarah")
Names('John', 'Bobby', 'Sarah')
答案 1 :(得分:0)
代替传递名称作为参数传递名称列表,您不需要对__init__()
方法进行任何更改
所以而不是
Names("John", "Bobby", "Sarah")
使用
Names(["John", "Bobby", "Sarah"])
并且您的init()代码可以正常工作。