編輯:請注意,這是一個在生產代碼中做的真正不好的想法。這對我來說只是一件有趣的事情。不要在家裏這樣做!python修改整個程序的__metaclass__
是否有可能在Python中修改整個程序(解釋器)的__metaclass__變量?
這個簡單的例子是工作:
class ChattyType(type):
def __init__(cls, name, bases, dct):
print "Class init", name
super(ChattyType, cls).__init__(name, bases, dct)
__metaclass__= ChattyType
class Data:
pass
data = Data() # prints "Class init Data"
print data
,但我很想成爲__metaclass__的能夠改變在子模塊甚至工作。因此,例如(文件m1.py):
class A:
pass
a=A()
print a
文件main.py:
class ChattyType(type):
def __init__(cls, name, bases, dct):
print "Class init", name
super(ChattyType, cls).__init__(name, bases, dct)
__metaclass__= ChattyType
import m1 # and now print "Class init A"
class Data:
pass
data = Data() # print "Class init Data"
print data
據我所知,全球__metaclass__不再在Python 3.X的工作,但是這不是我關心的(我的代碼,如果概念證明)。那麼有什麼方法可以在Python-2.x中完成這個任務嗎?
確實是黑魔法,但有趣的是:-) – Stan 2009-12-02 11:31:05