仅使用关键字参数初始化 python 对象
initializing python object with nothing but keyword args
我想知道如何在 python 中仅使用命名 args 初始化一个对象,如果可能的话。
如果 self.name = name 和 self.age = age 的顺序调换了,错误是初始化 age。我将这些作为对象的关键字参数给出,那为什么还不够呢?我在 class 中看到 python 使用显式命名的关键字参数及其默认值 (filename=None) 进行实例化,所以我假设 **kwargs 也可以工作。谢谢
您缺少的是需要按名称显式检索 kwargs。这是您的代码的修改版本,以说明。注意 name
和 age
.
的初始化
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
# you'll probably want to check that all required
# members were initialized.
bob = Person(name='bob', age=45)
print bob
print bob.age
输出:
<__main__.Person object at 0x1074e0bd0>
45
kwargs
是字典。所以你应该这样做:
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs["name"]
self.age = kwargs["age"]
我想知道如何在 python 中仅使用命名 args 初始化一个对象,如果可能的话。
如果 self.name = name 和 self.age = age 的顺序调换了,错误是初始化 age。我将这些作为对象的关键字参数给出,那为什么还不够呢?我在 class 中看到 python 使用显式命名的关键字参数及其默认值 (filename=None) 进行实例化,所以我假设 **kwargs 也可以工作。谢谢
您缺少的是需要按名称显式检索 kwargs。这是您的代码的修改版本,以说明。注意 name
和 age
.
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
# you'll probably want to check that all required
# members were initialized.
bob = Person(name='bob', age=45)
print bob
print bob.age
输出:
<__main__.Person object at 0x1074e0bd0>
45
kwargs
是字典。所以你应该这样做:
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs["name"]
self.age = kwargs["age"]