模块abc,寄存器方法

时间:2014-06-17 10:21:17

标签: python

我尝试在python中使用abstract,我创建了基类和具体类。写入寄存器方法后,显示Undefined variable from import: register。我认为注册只是一种方法,我将导入哪个库?

concreteTest.py:

import baseTest

class concreteTest(baseTest):

    def __abcMethodTest__(self):
        print("I am in concrete class")

baseTest.register(concreteTest)

if __name__ == '__main__':
    print 'Subclass:', issubclass(concreteTest, baseTest)
    print 'Instance:

baseTest.py:

from abc import ABCMeta
from abc import abstractmethod

class baseTest:
    __metaclass__ = ABCMeta

    @abstractmethod
    def __abcMethodTest__(self):
        while False:
            yield None

1 个答案:

答案 0 :(得分:2)

您在名为baseTest的模块中有一个名为baseTest的类,因此在导入模块baseTest后,您需要使用baseTest.baseTest来访问该类:< / p>

baseTest.baseTest.register(concreteTest)

请注意,您甚至不需要将concreteTest注册为虚拟子类,因为它已经是实际的子类。 register()方法用于注册实际上不是从您定义的抽象类派生的类,但是实现了接口。

也就是说,你不太可能经常想在Python中使用抽象类。它们在某些特殊情况下很有用,但不能用作声明接口的标准方法。另请参阅博文Python is not Java