python-多继承构造函数声明问题

背景

  • 有场景分别定义两组逻辑,随后有统一入口做基类属性的整合
  • 其中两组逻辑的积累构造函数定义入参不同
  • 设计类继承图如:

img

  • 实际的使用方式抽象为[使用] 小节
  • 实际开发过程中遇到问题

使用

    # tjc = TestJobConfiger()
    tjc = SubTest()
    print vars(tjc)
    print "\n".join([tjc.base_key,
                    tjc.base1_key,
                    tjc.subbase_key,
                    tjc.subbase1_key,
                    tjc.subtest_key])

期望结果

第一版实现

class Base(object):
    def __init__(self):
        print "enter Base"
        self.base_key = "base_key"

class Base1(object):
    def __init__(self, _arg1 = 1, _arg2 = 2):
        print "enter Base1" + str(_arg1) + "|" + str(_arg2)
        self.base1_key = "base1_key"

class SubBase(Base):
    def __init__(self, **kwargs):
        super(SubBase, self).__init__()
        print "enter SubBase"
        self.base_key = "subbase_key"
        self.subbase_key = "subbase_key"

class SubBase1(Base1):
    def __init__(self, _arg1 = 1, _arg2 = 2):
        super(SubBase1, self).__init__(_arg1 = _arg1, _arg2=_arg2)
        print "enter Base2" + str(_arg1) + "|" + str(_arg2)
        self.base1_key = "subbase1_key"
        self.subbase1_key = "subbase1_key"

class SubTest(SubBase, SubBase1):
    def __init__(self, _arg1 = 1):
        super(SubTest, self).__init__(_arg1=_arg1, _arg2=None)
        self.subtest_key = "subtest_key"

if __name__ == '__main__':
    # tjc = TestJobConfiger()
    tjc = SubTest()
    print "\n".join([tjc.base_key,
                    tjc.base1_key,
                    tjc.subbase_key,
                    tjc.subbase1_key,
                    tjc.subtest_key])
Traceback (most recent call last):
  File "/Users/enzhao/suanec/ksp/dispatch/weiclient/client/weiclient/libs/com/weibo/tools/job_manager/job_configer_tester.py", line 47, in <module>
    tjc.base1_key,
AttributeError: 'SubTest' object has no attribute 'base1_key'
enter Base
enter SubBase

第二版实现

二次继承实现

公共基类实现

Hack实现

猜你喜欢

转载自www.cnblogs.com/suanec/p/12486326.html