gpt4 book ai didi

python - 参数解包和分配给类变量

转载 作者:行者123 更新时间:2023-11-28 21:22:44 25 4
gpt4 key购买 nike

您好,我有以下代码,它试图创建一个类的实例并为其分配参数值。我正在尝试使用 *args 来执行此操作,如下所示:

def main():
testdata = ['FDR', False, 4, 1933]
apresident = President(testdata)
print apresident
print apresident.alive

class President:
id_iter = itertools.count(1)
#def __init__(self, president, alive, terms, firstelected):
def __init__(self, *args):
self.id = self.id_iter.next()
self.president = args[0]
self.alive = args[1]
self.terms = args[2]
self.firstelected = args[3]

我收到“元组索引超出范围”错误。正如您从注释行中看到的那样,我之前使用位置参数来完成此操作(有效),并使用如下行来完成此操作:

    self.president = president

在这种情况下,使用 *args 的正确方法是什么?我应该使用 *kwargs 吗?

最佳答案

您只将一个参数传递给 President(),即列表

['FDR', False, 4, 1933]

如果您想将该列表中的项目作为单独的参数传递,您可以这样做:

    apresident = President(*testdata)  # note the * character

正如 Panic 上校所指出的,在您的示例中使用参数解包有点毫无意义 - 大概您的实际用例更复杂,并且证明其使用是合理的。

更新:

您的评论实际上是一个后续问题,作为一个单独的问题会更好,但是:

def main():
testdata = {
"president": "FDR",
"alive": False,
"terms": 4,
"firstelected": 1933,
}
apresident = President(**testdata)
anotherpresident = President(president="BHO", terms=2, firstelected=2008)
print apresident
print apresident.alive
print anotherpresident
print anotherpresident.alive

class President:
id_iter = itertools.count(1)
#def __init__(self, president, alive, terms, firstelected):
def __init__(self, **kwargs):
self.id = self.id_iter.next()
self.president = kwargs.get("president", None)
self.alive = kwargs.get("alive", True)
self.terms = kwargs.get("president", 1)
self.firstelected = kwargs.get("president", None)

这也展示了如何定义默认值。

关于python - 参数解包和分配给类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com