[python] globals()['Foo']=value 和 setattr(module, 'Foo', val,globalssetattr,foo.pyclass


foo.py

class Foo(object):    foo_str = 'foo_str'    def __call__(self):        print('call', Foo.foo_str)    @staticmethod    def config(arg=None):        if arg:            Foo.foo_str = arg        import sys        foo = Foo()        foo.Foo = Foo        foo.config = Foo.config        sys.modules['foo'] = foo        globals()['Foo'] = foo.Foo      #1        #setattr(foo, 'Foo', foo.Foo)  #2 Foo.config()

bar.py

import foofoo()foo.config('new str')foo()

为什么bar.py的运行情况是(python 2.7.3):

只注释掉1报错
Traceback (most recent call last):                             File "bar.py", line 3, in <module>                             foo()                                                      File "/tmp/foo.py", line 5, in __call__                print('call', Foo.foo_str)                               AttributeError: 'NoneType' object has no attribute 'foo_str' 
只注释掉2正常
('call', 'foo_str') ('call', 'new str') 

编橙之家文章,

评论关闭