【发布时间】:2018-10-28 12:37:43
【问题描述】:
我想知道最好(最 Pythonic)的解决方案是将列表或可变数量的参数传递给函数/方法。
例如,我必须参加以下课程:
class Dataset():
def __init__(self, *args):
self.data_set = args
这是 setter 属性的一部分:
@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 = 数据集([4,3,5])
或变量号或参数:
ds1 = 数据集(4,3,5)
那么,最好的实现是什么?我是否走在正确的轨道上?
【问题讨论】:
-
我不认为这是你想要的,但如果你在你传递的列表之前放一个
*(即:ds1 = Dataset(*[4,3,5])),列表将被解包,它将是就像您输入的一样:ds1 = Dataset(4,3,5)。由于您已经接受 *args 作为参数,这就是您要做的所有事情。如果这是您想要的,请告诉我,以便我可以将其作为答案供其他访问者查看。 -
接受要么列表或可变参数。不要两者都做。
-
@Aran-Fey 你能解释一下原因吗?
-
@DennisPatterson 很好的答案,但对于这种特殊情况,我认为 progmatico 的解决方案最能回答我的问题;3
-
@KamenHristov 因为它引入了歧义。如果你的函数被称为
func([1, 2]),你怎么知道是func(1, 2)还是func([[1, 2]])?
标签: python oop variadic-functions setter class-design