我尝试在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
答案 0 :(得分:2)
您在名为baseTest
的模块中有一个名为baseTest
的类,因此在导入模块baseTest
后,您需要使用baseTest.baseTest
来访问该类:< / p>
baseTest.baseTest.register(concreteTest)
请注意,您甚至不需要将concreteTest
注册为虚拟子类,因为它已经是实际的子类。 register()
方法用于注册实际上不是从您定义的抽象类派生的类,但是实现了接口。
也就是说,你不太可能经常想在Python中使用抽象类。它们在某些特殊情况下很有用,但不能用作声明接口的标准方法。另请参阅博文Python is not Java。