我有一个Person对象:
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
# create a Person object
a = Person('eric', 29)
我想扩展构造函数以包含country(默认为' US'),而不必每次Person.__init__
的原型更改时都响应。我显然可以做到这一点:
class CountryPerson(Person):
def __init__(self, country='US', *args, **kwargs):
Person.__init__(self, *args, **kwargs)
self.country = country
这里的问题是我无法使用' US'的默认值。同时也将name
和age
作为未命名的参数传递给构造函数。基本上,我可以通过以下方式创建美国人:
CountryPerson('US', 'robert', 15) # not taking advantage of the 'US' default
CountryPerson(name='robert', age=15) # country defaults to 'US'
我希望能够做这些事情:
CountryPerson('robert', 15)
CountryPerson('robert', 15, 'JP')
有没有办法在python中这样做?我知道我可以像**kwargs
这样添加一些东西:
class SloppyCountryPerson(Person):
def __init__(self, *args, **kwargs):
self.country = kwargs.pop('country', 'US')
Person.__init__(self, *args, **kwargs)
但是现在这个功能不再是自我记录了(country
是函数的有效参数甚至不明显,更不用说它的默认值了价值是'美国')。
我想真正的问题是python不允许我在country
之后将**kwargs
添加到参数的末尾,执行此操作:
class GoodCountryPerson(Person):
def __init__(self, *args, **kwargs, country='US'):
Person.__init__(self, *args, **kwargs)
self.country = country
任何方式?