我有一个案例,我的类有一个自定义元类,它在创建它时调用该类的类方法,例如:
class Metaclass(type):
def __new__(cls, name, bases, attrs):
...
new_class = super(Metaclass, cls).__new__(cls, name, bases, attrs)
...
new_class.get_fields() # do something
...
return new_class
class FooBar(object):
__metaclass__ = Metaclass
@classmethod
def get_fields(cls):
...
(此类代码的示例在Tastypie中。)
问题是如果我想做:
class NewBar(FooBar):
@classmethod
def get_fields(cls):
super(NewBar, cls).get_fields()
...
这不起作用,因为NewBar
在调用点尚未创建super
(程序流仍在元类中)。那么,有什么解决方法吗?
我知道get_fields
方法可能会成为元类的方法,但这会使继承更难实现(您必须同时定义新的元类和类本身,这对想要扩展这些类的开发人员不利)。
(Python 2.7。)