Unexpected UnboundLocalError for a module within nested class
我继承了一个旧的单元测试,它试图为嵌套在另一个类中的自定义类重写名称
我看到的是一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import datetime class Foo(object): def inner_scope(self): real_datetime = datetime class datetime(datetime.datetime): @staticmethod def convert(): return"blah" x = datetime(2012, 1, 1) y = x.convert() return x, y f = Foo() f.inner_scope() |
我明白这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | In [439]: f.inner_scope() --------------------------------------------------------------------------- UnboundLocalError Traceback (most recent call last) <ipython-input-439-c5053fb49b64> in <module>() ----> 1 f.inner_scope() <ipython-input-437-222b3997ec2c> in inner_scope(self) 3 def inner_scope(self): 4 ----> 5 real_datetime = datetime 6 class datetime(datetime.datetime): 7 @staticmethod UnboundLocalError: local variable 'datetime' referenced before assignment |
我试着添加
由于闭包,导入的模块不应该提供EDOCX1的值(0),因为它是从
据我所知,我也不想修改它,因为我看到过其他
这个案例与你所看到的其他与
如果你考虑的话,这可能会更清楚
1 2 | class datetime(datetime.datetime): ... |
相当于:
1 | datetime = type('datetime', (datetime.datetime), {...class members...}) |
作为解决这类问题的方法,对于模拟类,您可以使用与
在python 3中,您只需声明