讓我們有一個元類FieldModelMetaclass
稱爲fields.py
外部模塊,改變FieldModel
類:是否可以從外部模塊修改元類?
# module fields.py
class FieldModelMetaclass(type):
def __new__(cls, name, bases, attrs):
# code to alter class creation
class FieldModel(object):
__metaclass__ = FieldModelMetaclass
print 'run at parse time BEFORE metaclass applies'
# module consumer.py
import fields
def adjust_metaclass_new(cls, name, bases, attrs):
# do an extra work on class `cls' and attributes `attrs'
# Is somehow possible from here alter `FieldModelMetaclass.__new__`
# by injection of adjust_metaclass_new to modify FieldModel
# before it gets instantiated ?
mymodel = fields.FieldModel()
據我所知,一類元類需要在效果編譯運行這樣的,當我做的那一刻導入定義的模塊,類已經受到影響。
如何從外部模塊創建類時攔截元類的效果?
元類在運行時*生效,而不是編譯時。但是,由於它在同一個模塊中被使用*,因此在加載類語句之前,不能攔截元類。 –
@MartijnPieters哦,是的,我現在看到:)當然:) –
@MartijnPieters所以我留下來注入'Class .__ new__'方法,所以它會在每個類實例化? –