如何在类完全构造之前调用的方法中实现类似超级的行为。我可以实现这样一系列相互依赖的方法吗
from six import with_metaclass
class Meta(type):
"""a metaclass"""
def __init__(cls, name, bases, classdict):
cls.setup_class()
def setup_class(cls):
pass
class A(with_metaclass(Meta, object)):
"""a class"""
@classmethod
def instantiate(cls, name):
print("instantiating through '%s'" % name)
@classmethod
def setup_class(cls):
cls.instantiate('A')
class B(A):
@classmethod
def setup_class(cls):
super(B, cls).setup_class()
cls.instantiate('B')
class C(B) pass
显然这是行不通的,因为调用setup_class
时B
并不正确存在
我问这个问题已经有一段时间了,但找不到一篇文章来解释元类的这一方面。事实上,我有它这么长时间,我想出了这个替代品,最终没有必要,solution。从技术上讲,它完全符合我想要的语法(这很酷),但最终它是一个黑客。由于我花了这么长时间编写了一段毫无意义(但仍然很酷)的代码,我想我至少应该试着确保没有其他人陷入同样的困境
我的困惑实际上源于我没有完全扩展我对元类的理解,以及元类与类之间的关系,从而得出合乎逻辑的结论。因此,事实证明,创建我想要的继承类型的最佳方法实际上是在一系列元类中执行它-出于同样的原因,尝试通过类实例继承属性没有意义,使元类实例多态也没有意义:
如果有人想更彻底地研究这个问题,我相信有人会很感激的
相关问题 更多 >
编程相关推荐