【问题标题】:Conditional accessing of classes based on constructor parameter基于构造函数参数的类的条件访问
【发布时间】:2019-05-21 01:37:07
【问题描述】:
from folder.test.test1 import Test1
from folder.test.test2 import Test2
from other_folder import Test3

class Sample(Test1, Test2, Test3):
    def __init__(self, version):
        Test3.__init__(self)

        if version == 'gen1':
            self.__class__ = Test1
            Test1.__init__()
        elif version == 'gen2':
            self.__class__ = Test2
            Test2.__init__()

    def login(self, ip):
        pass

if __name__ == '__main__':
    ob = Sample(version='gen2')
    ob.login('192.168.1.100')

我收到此错误:

AttributeError: 'Test2' object has no attribute 'login'

虽然我有一个Sample 类对象,但无法访问Sample 类的login() 方法。

我希望对象能够访问SampleTest2Test3 方法(不是Test1,因为版本是'gen2')。如果版本是'gen1',则Sample 对象只能访问SampleTest1Test3 方法,而不是Test2

【问题讨论】:

    标签: python python-2.7 inheritance multiple-inheritance


    【解决方案1】:

    一种解决方案可能是将其分成 2 个类(如果可以的话):

    class BaseSample(Test3):
        def login(self, ip):
            pass
    
    class SampleGen1(Test1, BaseSample):
        pass
    
    class SampleGen2(Test2, BaseSample):
        pass
    

    然后在你的代码中使用适当的类:

    if version == 'gen1':
        ob = SampleGen1()
    elif version == 'gen2':
        ob = SampleGen2()
    ob.login('192.168.1.100')
    

    这对你有用吗?

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2021-10-11
      • 2018-06-23
      • 1970-01-01
      • 2014-08-29
      • 2014-03-28
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多