【发布时间】:2017-09-12 16:24:55
【问题描述】:
我想从我的 api.py 中获取我的子类 Sub 类对象:
import inspect
from tm_base import Base
import tm_child
for k, v in vars(tm_child).iteritems():
if inspect.isclass(v):
if (Base in inspect.getmro(v) and
not inspect.isabstract(v)):
print v
运行 api.py 时,我得到了两者:
<class 'tm_child.Sub'>
<class 'tm_base.Base'>
我只想要<class 'tm_child.Sub'>,这就是我使用not inspect.isabstract(v) 的原因。我看不出我的代码有什么问题..
这是我的其他文件。
tm_base.py
from abc import ABCMeta
class Base(object):
__metaclass__ = ABCMeta
tm_child.py
from tm_base import Base
class Sub(Base):
pass
【问题讨论】:
-
抽象类必须有抽象方法; ABCMeta 元类的简单存在不会使类抽象。毕竟,Sub 也有 ABCMeta 作为它的元类,继承自 Base。
标签: python inheritance