以下代码在带有_x.__dict__['c']=8
的Python 2.7中有效
class _x:
def __init__(self):
self.a = 6
self.b = 7
_x.__dict__['c']=8
print("good!")
y=_x()
print(y.__dict__)
print(_x.__dict__)
输出:
good!
{'a': 6, 'b': 7}
{'c': 8, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x00000000049227B8>}
以上代码在Python 3.6中无法正常使用
_x.__dict__['c']=8
并出现错误:
TypeError Traceback (most recent call last)
<ipython-input-5-b4146e87f5a4> in <module>()
6 print("good!")
7
----> 8 y=_x()
9 print(y.__dict__)
10 print(_x.__dict__)
<ipython-input-5-b4146e87f5a4> in __init__(self)
3 self.a = 6
4 self.b = 7
----> 5 _x.__dict__['c']=8
6 print("good!")
7
TypeError: 'mappingproxy' object does not support item assignment
有什么建议吗?
答案 0 :(得分:0)
您尝试使用非公开接口是否有任何原因?如果出于某种原因要在实例化期间设置类属性,请尝试
class A:
def __init__(self):
self.__class__.k = 1
如果要动态设置访问权限,请使用setattr
答案 1 :(得分:0)
您可以通过在变量名称之前指定类名称来设置类变量。
更改:
_x.__dict__['c']=8
收件人:
_x.c=8