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