如何在我的元类中获取类的父类?
Posted
技术标签:
【中文标题】如何在我的元类中获取类的父类?【英文标题】:How to get parent classes of class in my meta class? 【发布时间】:2015-01-27 19:58:32 【问题描述】:我有following script:
#!/usr/bin/python3
class MyMeta(type):
def __new__(mcs, name, bases, dct):
print(name + " " + str(bases))
return super(MyMeta, mcs).__new__(mcs, name, bases, dct)
class A(metaclass=MyMeta):
def foo(self):
pass
class B(A):
pass
class C(B):
def foo(self):
pass
def main():
pass
if __name__ == "__main__":
main()
我得到以下输出:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>,)
但我期待它:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>, <class '__main__.A'>)
我哪里出错了?
【问题讨论】:
【参考方案1】:bases
参数列表在类定义中列出的基类。
好像你想要class.mro
:
class MyMeta(type):
def __new__(mcs, name, bases, dct):
ret = super(MyMeta, mcs).__new__(mcs, name, bases, dct)
print(name + " " + str(ret.mro()[1:-1]))
return ret
【讨论】:
感谢您的回答和解释。以上是关于如何在我的元类中获取类的父类?的主要内容,如果未能解决你的问题,请参考以下文章
Ruby - 在 ruby 类的元类中定义 self 方法
获取派生类以显示与派生类的父类具有聚合关系的抽象类中的变量的 C++ 错误