python - 标准库中最简单的可修改 Python 类/对象?
问题描述
在 Python 中创建的最简单的对象是
obj = object()
但是我们不能添加更多内容:
In [287]: obj = object()
In [288]: obj.param = 1
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-288-78f3fb98506b> in <module>
----> 1 obj.param = 1
AttributeError: 'object' object has no attribute 'param'
另一方面,如果我们创建一个最简单的类,然后创建该类的实例,它是可修改的:
In [289]: class SimplestClass: pass
In [290]: obj2 = SimplestClass()
In [291]: obj2.param = 1
In [292]: obj2.param
Out[292]: 1
问题是:python 标准库中是否有类似的东西SimplestClass
,object
但可以修改?(我想在教育课程中使用它在课前介绍对象)
解决方案
您可以使用type
创建一个无名类并立即创建一个实例:
obj = type('', (), {})()
obj.a = 1
print(obj.a)
# 1
但是,object
如果您愿意使用,您仍然可以使用setattr
:
obj = object()
setattr(obj, 'a', 1)
print(obj.a)
# 1
推荐阅读
- cmake - cmake 配置失败,出现 pthread 错误
- c++ - 在 C++ 中的内存文件系统中
- java - 使用 Spring mvc 控制器的页面显示将端点附加到页面资源
- docker - 使用 docker 镜像使用 dockerfile 构建不同的 docker 镜像
- java - Jackson 序列化忽略迭代器类的“@JsonTypeInfo”和“@JsonIgnore”?
- python - 为什么 Sympy 没有解决 eq 并返回一个空列表?
- javascript - Gulp concat 将多个 js 模块合并为一个 js 文件
- django - Django - 在数据库模型中插入上传的 excel 文件中的数据
- c++ - C7608:原子约束在使用 range::to_vector 时应该是一个常量表达式
- javascript - 在移动设备中显示鼠标光标 - CSS/JS