gpt4 book ai didi

python - 类名元组

转载 作者:太空狗 更新时间:2023-10-29 19:34:56 24 4
gpt4 key购买 nike

当我需要一个快速的一次性类时,我发现自己经常在我的 python 代码中编写这个类。

class Struct(object):
def __init__( self, **kwargs ):
for k in kwargs:
setattr(self,k,kwargs[k])

基本思路是这样我可以快速完成以下操作:

foo = Struct( bar='one', baz=1 )
print foo.bar
foo.baz += 1
foo.novo = 42 # I don't do this as often.

当然,这不能很好地扩展,添加方法简直是疯了,但即便如此,我仍然有足够的仅用于数据的一次性类,我一直在使用它。

这就是我的想法namedtuple本来是。但是 namedtuple 的语法庞大且笨拙。

在标准库中是否有我还没有找到的东西可以做到这一点或更好?

这是糟糕的糟糕风格吗?还是它有一些隐藏的缺陷?

更新

两个具体的例子来说明为什么我不只使用字典。这两个示例都可以用字典来完成,但它显然是非惯用的。

#I know an order preserving dict would be better but they don't exist in 2.6.
closure = Struct(count=0)
def mk_Foo( name, path ):
closure.count += 1
return (name, Foo( name, path, closure.count ))

d = dict([
mk_Foo( 'a', 'abc' ),
mk_Foo( 'b', 'def' ),
# 20 or so more
] )


@contextmanager
def deleter( path ):
control = Struct(delete=True,path=path)
try:
yield control
finally:
if control.delete:
shutil.rmtree(path)

with deleter( tempfile.mkdtemp() ) as tmp:
# do stuff with tmp.path

# most contexts don't modify the delete member
# but occasionally it's needed
if keep_tmp_dir:
tmp.delete = False

最佳答案

有一个 python 配方(它只是更新实例的字典而不是调用 setattr) Recipe 52308

class Bunch(object):
def __init__(self, **kwds):
self.__dict__.update(kwds)

关于python - 类名元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131044/

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