Why can't I add arbitrary members to object instances?
本问题已经有最佳答案,请猛点这里访问。
我刚刚意识到:
1 2 3 4 | class A(object): pass a = A() a.x = 'whatever' |
工作(不会引发错误并创建新的
但这是:
1 2 | a = object() a.x = 'whatever' |
号
提升:
1 | AttributeError: 'object' object has no attribute 'x' |
虽然我可能永远不会在实际的生产代码中使用它,但我对不同行为的原因有点好奇。
有什么提示吗?
可能是因为
此外,一些类(如在C中实现的datetime)也不能在运行时使用新属性进行扩展。
此类课程的解决方法是:
1 2 3 4 5 | class MyObject(): # extend that class, here we extend object pass # add nothing to the class o = MyObject() o.x = 'whatever' # works |