在子类化时向类添加函数参数

时间:2015-01-16 00:26:55

标签: python oop subclassing

我有一个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'的默认值。同时也将nameage作为未命名的参数传递给构造函数。基本上,我可以通过以下方式创建美国人:

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

任何方式?

0 个答案:

没有答案