1

我正在寻找一种方法来根据创建对象时作为参数传递的条件返回类对象。

myclass1.py

class myver1():
    def __init__(self):
        print("I am in myver1")

    def fun1(self):
        print("I am in method func1 - myver1")

    def fun2(self):
        print("Access this method if version 1 is passed - myver1")

class myver2():
    def __init__(self):
        print("I am in myver2")

    def fun1(self):
        print("I am in method func1 - myvers2")

    def fun2(self):
        print("Access this method if version 2 is passed - myver2")

myclass2.py

class libtest():
    def __init__(self, version):
        self.version = version
        self.ret_obj

    def ret_obj(self):
        if self.version == 1:
            return myver1()
        if self.version == 2:
            return myver2()
testobj = libtest(version=1)
testobj.fun1()

预期输出:

I am in method func1 - myver1

运行时看到的错误:

Traceback (most recent call last):
  File "C:\test44.py", line 12, in <module>
    mytest.myver1()
AttributeError: 'libtest' object has no attribute 'myver1'

已编辑::谢谢大家,我已按照建议调用了该对象:

mytest = libtest(version=2).ret_obj()
mytest.fun1()

这是一个正确的方法吗?有没有更好的方法?

4

2 回答 2

2

您必须调用.ret_obj()以获取myver有关版本的正确对象。你可以用不同的方式调用它,关于你想要存储的内容testobj

  1. 类型testobjmyver1

    testobj = libtest(version=1).ret_obj()
    testobj.fun1()
    
  2. 类型testobjlibtest

    testobj = libtest(version=1)
    testobj.ret_obj().fun1()
    
于 2020-05-07T17:21:26.543 回答
0

当我运行您的代码时,我收到以下错误:

Traceback (most recent call last):
  File "main.py", line 33, in <module>
    testobj.fun1()
AttributeError: 'libtest' object has no attribute 'fun1'

这告诉我们这testobj是一个libtest没有名为 的函数的对象fun1。查看代码,我们看到它fun1class myver1and中class myver2。您需要调用ret_obj()以获取正确的对象:

testobj.ret_obj().fun1()
于 2020-05-07T17:21:52.997 回答