我尝试在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

10-06 05:17