背景
- 有场景分别定义两组逻辑,随后有统一入口做基类属性的整合
- 其中两组逻辑的积累构造函数定义入参不同
- 设计类继承图如:
- 实际的使用方式抽象为[使用] 小节
- 实际开发过程中遇到问题
使用
# 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实现