Pass a list or variable number of arguments as method parameters
我在想什么是最好的(最简单的)解决方案,将一个列表或变量数量的参数传递给一个函数/方法。
例如,我必须学习以下课程:
1 2 3 | class Dataset(): def __init__(self, *args): self.data_set = args |
这是setter属性的一部分:
1 2 3 4 5 6 7 8 9 | @data_set.setter def data_set(self, args): data = [] for item in args: if type(item) is list: data = [k for k in item] break data.append(item) self._data_set = data |
号
我搜索了网页,但找不到太多关于这个话题的内容。这里我的目标是设计类构造函数,使其与给定参数的列表一起工作:
ds1 = Dataset([4,3,5])
号
或变量数或参数:
ds1 = Dataset(4,3,5)
号
那么,什么是最好的实现,我是否在正确的轨道上?
你可以试试这个,
1 2 3 4 5 6 7 8 9 10 | class Dataset(): def __init__(self, *args): if isinstance(args[0], list) and len(args) == 1: print('Received a list') else: print('Received:', args) obj = Dataset(1,2,3) obj = Dataset([1,2,3], 2) obj = Dataset([1,2,3]) |
输出:
1 2 3 | Received: (1, 2, 3) Received: ([1, 2, 3], 2) Received a list |
号编辑:
此代码以简单的方式执行您想要的操作。没别的了。还有其他方法,我觉得它们不简单。
你的评论实际上是个很好的问题。
问题不在这段代码中,而是在您所要求的和Python语言中。您需要方法重载,而python没有。
测试参数类型是不精确的,因为python是一种动态类型语言。您可以这样做,但是您将函数的实用性限制为特定的类型。
测试参数类型也会产生一个典型的
如果您正在编写函数,请看一下
因为Python不直接支持方法/函数重载,所以您所要求的不是要使用的通用模式。
现在阿兰费给了你很好的建议。这种编码行为在Python中很少见,实际上会引入歧义。您的API合同变得不清楚。我应该通过一个列表还是varargs。为什么选择?就因为你已经有了带*args和*kwargs的元组和dict,还想要列表吗?如何将"varargs"构建为列表元素?
您需要一个参数列表或变量数,但是列表本身也有一个"变量数参数"。
所以要使用其中一个。如果你继续最初的想法,至少保持简单,就像这个答案。