处理构造函数中继承的更好方法

时间:2015-09-14 15:02:13

标签: python inheritance constructor

我有以下BaseClass

class A(object):
    __metaclass__ = abc.ABCMeta
    def __init__(self, val1, val2):
        self.v1 = val1
        self.v2 = val2

然后是一些扩展类:

class B(A):
    def __init__(self, *args, **kwargs):
        super(self.__class, self).__init(*args[:len(args)-1], **kwargs
        self.v3 = args[len(args)]

基本上我想用以下方式调用它:

x = B(1,2,34)

但这似乎我需要有一个特定的顺序,如何以正确的方式实现 init ,以便基类可以初始化其v1,v2变量和扩展类B可以初始化v3值(在这种情况下为34)。

1 个答案:

答案 0 :(得分:1)

您应该明确超类A.__init__所需的参数。如果你提供< 2 args到B然后你会得到一个错误。

class B(A):
    def __init__(self, val1, val2, *args):
        super(self.__class, self).__init__(val1, val2)
        self.v3 = args  # or args.pop() or whatever