此问题已在此处有答案:
How can I automatically assign init arguments to attributes?(6个回答)
昨天关门了。
Python中有没有一种方法可以从方法参数声明示例变量,而不需要编写样板文件?
例如,是否有一种方法可以自动声明self.foo
、self.bar
和所有其他参数?
def __init__(self, foo, bar, ..., last):
self.foo = foo
self.bar = bar
...
self.last = last
5条答案
按热度按时间of1yzvn41#
事实上是有的,虽然我认为这是一种非常丑陋的方式
正如Tim Roberts在评论中建议的那样,使用
namedtuple
是一种更好、更干净的方法(您也可以看看dataclasses.dataclass
)。eh57zj3b2#
您可以在
__init__
中使用关键字参数。举例来说:然后你可以使用任何你想要的关键字参数来创建一个类:
这些参数被分配为类示例的属性:
如果这样做,您可能需要添加一些检查,例如。将它们限制在一些已知的名称集合中。否则,不需要的名称可能会覆盖示例的方法名称。
或者,您可以将关键字字典直接保存在类示例中,作为单个属性。这将使类与名称隔离。举例来说:
然后,您可以通过
self.args
访问它们。bgtovc5b3#
方案一
正如@Tim Roberts建议的那样,这就是如何使用
namedtuple
完成的。您甚至可以创建默认参数
方案二
或者,如果您对用户传递任何随机参数没有意见,您可以使用
**kwargs
来设置示例变量(它不使用collections库,并且可以说更容易)。这里有一个例子
请记住,这些都不是标准的,大多数情况下,人们只是在
__init__
中声明示例变量。gojuced74#
老实说,如果你有一组固定的输入,你可以使用这个:
如果不指定 *kwargs,这应该可以完成
cwxwcias5#
无论你的方法签名看起来如何(是否有预定义的位置和/或关键字参数),你都可以使用
locals()
(在声明其他局部变量之前):这样,* 所有 * 参数都被复制到示例变量。