作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Python 支持“动态”创建属性,就像这样。
class MyClass:
def __init__(self):
pass
x = MyClass
x.new = 5
print(x.new) # prints 5
x.first.second = 1 # this will raise
x.first = MyClass()
x.first.second = 1
print(x.first.second)
最佳答案
使用 __getattr__
创建一个新的属性命名空间并返回。 __eq__
被执行。行为类似于 types.SimpleNamespace
.
class Namespace:
def __init__(self):
pass
def __getattr__(self, item):
ret = Namespace()
setattr(self, item, ret)
return ret
def __eq__(self, other):
return isinstance(other, Namespace) and vars(self) == vars(other)
ns = Namespace()
ns.first.second = 1
print(ns.first.second) # 1
print(ns.unknown) # <__main__.Namespace object at 0x0000025FC1E5B400>
关于python - 如何在 Python 中递归创建类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962562/
我是一名优秀的程序员,十分优秀!