gpt4 book ai didi

python - 如何在 Python 中递归创建类属性?

转载 作者:行者123 更新时间:2023-12-03 16:21:17 25 4
gpt4 key购买 nike

Python 支持“动态”创建属性,就像这样。

class MyClass:
def __init__(self):
pass

x = MyClass
x.new = 5
print(x.new) # prints 5

但这有点难看。我必须在类中有一些指令,函数或类属性定义。

但主要的障碍是...
x.first.second = 1  # this will raise

它提高是因为 first 显然不存在。我将不得不做这样的事情。
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com