检查未实例化插件子类与元类类型匹配时出现异常结果的问题咨询
检查未实例化插件子类与元类类型匹配时出现异常结果的问题咨询
各位好,我最近在处理基于抽象基类的插件系统时遇到了一个困惑,想请大家帮忙解答。
先说说我的代码结构:
我定义了一个继承自ABC的抽象基类作为插件的父类:
from abc import ABC, abstractmethod class MetaReader(ABC): def __init__(self, arg1, arg2, **kwargs): # 初始化逻辑 ...
然后写了一个插件子类继承它:
from utils.MetaReader import MetaReader class ABF2Reader(MetaReader): # 子类实现 ...
目前实例化这些子类是完全正常的,功能也符合预期。但现在我需要做的是不实例化,直接加载这些插件类,并且要判断这些未实例化的类是否属于MetaReader体系,以此来区分不同类型的插件。
于是我写了一段测试代码来验证类型:
from utils.MetaReader import MetaReader from plugins.datareaders.ABF2Reader import ABF2Reader # reader是ABF2Reader的一个实例 print(type(reader)) # MetaReader是未实例化的父类本身 print(type(MetaReader)) # ABF2Reader是未实例化的子类本身 print(type(ABF2Reader))
结果输出让我很困惑:
<class 'plugins.datareaders.ABF2Reader.ABF2Reader'>
<class 'abc.ABCMeta'>
<class 'abc.ABCMeta'>
我本来以为检查未实例化的ABF2Reader的类型会和MetaReader有更直接的关联,但现在两者的type都是ABCMeta,这让我没法正确区分。想问问大家:
- 为什么会出现这样的输出结果?
- 我应该用什么方法来正确判断一个未实例化的类是否是
MetaReader的子类(或者属于这个元类体系)?
备注:内容来源于stack exchange,提问作者KBriggs
相关产品推荐
相关产品推荐

