如何将属性添加到Python3中带有dict的类的\uu init \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()中的类?

2024-10-03 19:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码在python2.7中使用_x.__dict__['c']=8

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>}

上面的代码在python3.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

有什么建议吗?你知道吗


Tags: 代码inselfinputinitmaindefipython
2条回答

你有什么理由尝试使用非公共接口吗?如果出于某种原因您想在实例化期间设置类属性,请尝试

class A:
    def __init__(self):
        self.__class__.k = 1

如果要动态设置访问权限,请使用^{}

this answer中描述的可变性变化背后的推理

可以通过在变量名之前指定类名来设置类变量。你知道吗

更改:

_x.__dict__['c']=8

收件人:

_x.c=8

相关问题 更多 >