【发布时间】:2020-01-29 03:13:15
【问题描述】:
下面的脚本尝试从Outer 类中删除Inner1 嵌套类。我收到明确的错误“TypeError:无法删除 __class__ 属性”。死胡同?
def Loader(cls):
for key in dir(cls):
value = getattr(cls, key)
if isinstance(value, type):
delattr(cls, key)
return cls
@Loader
class Outer:
class Inner1:
X = 1
print(Outer.Inner1.X)
【问题讨论】:
-
记住
__dir__会返回各种各样的东西。 -
将其减少到
delattr(Outer, 'Inner1')将按预期工作 - 发生的情况是dir(cls)生成了__class__属性,由于生成的代码delattr(Outer, '__class__')无法从任何类中删除该属性 -
Loader试图删除的不仅仅是Inner1,它还试图删除cls中的任何内容,即type的一个实例。错误实际上很清楚 - 您的代码试图删除__class__属性,但它不能。