类似命名元组的类

2023-12-29

当我需要一个快速的一次性类时,我发现自己经常在我的 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.

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

这就是我的想法命名元组 http://docs.python.org/library/collections.html#collections.namedtuple将会是。但namedtuple 的语法庞大且笨拙。

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

这是不好的风格吗?或者它有一些隐藏的缺陷吗?

update

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

#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 配方(它只是更新实例的 dict 而不是调用 setattr)食谱 52308 http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/?in=user-97991

class Bunch(object):
    def __init__(self, **kwds):
        self.__dict__.update(kwds)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类似命名元组的类 的相关文章

随机推荐

  • 将指针传递给函数并修改它

    stackoverflow 和 C C 的新手 我正在努力实现二叉树并有一个简单的问题 可以说我有以下内容 struct Node int data Node right child Node left child void addNode
  • Java 8 函数接口对象的 Java Hashcode 和 Equals

    我有一些代码如下所示 import java util ArrayList import java util List import java util function Function class MyObj private final
  • 如何将 sp_executesql 结果放入变量中?

    我需要执行一段动态 SQL 然后需要将结果存储到变量中 我知道我可以使用sp executesql但找不到有关如何执行此操作的明确示例 如果你有 OUTPUT 参数 你可以这样做 DECLARE retval int DECLARE sSQ
  • Reveal.js HTML 代码语法高亮显示而不渲染

    针对 Reveal js 用户的问题 我试图在 Reveal js 演示文稿中显示 HTML 标记 问题是它在我的代码语法突出显示块中呈现 html 块 因此看不到标记 有没有解决的办法 下面的例子 section h2 Pretty Co
  • 将 import() 转换为同步

    我正在尝试转换我的所有节点require 进入import 然而 这些语句是异步的 我遇到了一些麻烦 现在我有 import as fs from fs const paths fs readdirSync src modules map
  • 将 Column(str) 转换为 (Float) ,ValueError: 无法将字符串转换为 float: 'Null'

    对不起 各位 我知道这个问题之前已经被回答过 我尝试了所有答案 也进行了研究 并尝试了不同的事情 4 个小时 我无法完成 我相信我的数据有一些奇怪的东西 所以按照我的数据和我的尝试 x pd DataFrame Cost 83 534625
  • 在膨胀布局中使用 setText() 到 TextView() 后,文本不显示

    是的 我知道以前有人问过类似的问题 但我尝试了很多 所以我在膨胀布局中的 TextView 中设置文本时遇到问题 我尝试了 setContentView 然后它可以工作 但是带有菜单的 Activity main xml 无法工作 所以我尝
  • Google AdSense 的 400 错误请求

    我正在运行一个使用 AJAX 请求和 History pushState 进行导航的网站 请求的内容代码包含Google的异步AdSense代码
  • ^= 32 将小写字母转换为大写字母,反之亦然,背后的想法是什么?

    我正在解决 codeforces 上的一些问题 通常我首先检查字符是大写还是小写英文字母 然后减去或添加32将其转换为相应的字母 但我发现有人这么做 32做同样的事情 这里是 char foo a foo 32 char bar A bar
  • 什么是可组合运行时类?

    我正在尝试使用 C WinRT 创建一个简单的 xaml 应用程序 我有 WPF 背景 拥有一个基类是很常见的 实现 INotifyPropertyChanged 并让其他类继承它 当我尝试对 C WinRT 执行相同操作时 我失败并出现错
  • 面向列的数据库与面向行的数据库

    我已经使用了很长时间的面向行的数据库设计 除了数据仓库项目和大数据示例之外 我还没有在 OLTP 应用程序中使用面向列的数据库设计 我的面向行的表看起来像 ID Make Model Month Miles Cost 1 BMW Z3 12
  • 如何跳出多个循环?

    给出以下代码 不起作用 while True Snip print out current state while True ok get input Is this ok y n if ok lower y break 2 This do
  • 从 Visual Studio 2019 将 ASP.NET Core 3.1 站点发布到 Azure 时出错

    我有一个预先存在的ASP NET 核心 3 0应用程序已成功部署到Azure 应用服务 使用AspNetCoreModuleV2模块 将应用程序升级到 今天发布的 后ASP NET 核心 3 1 应用程序在我的本地版本上正确构建并运行IIS
  • 从配置中读取 Azure 函数设置

    我使用带有属性的 Azure Functions 来定义功能 public static class PostPublishTimerTrigger FunctionName PostPublishTimerTrigger public s
  • 类型错误:createSlice 不是 vitest 中的函数

    我正在构建一个 tic tac toe 游戏 与 redux 进行反应 并尝试使用 vitest 进行测试 我已经设置了板片和商店 但是当尝试运行我的第一个测试时 我收到以下错误 Failed Suites 1 FAIL src slice
  • 将 NSArray 复制到空 NSArray 中

    我有第一个 NSArrayfirstArray我做 firstArray removeAllObjects 当我想用另一个数组的内容填充它之后secondArray 这样写对吗 firstArray secondArray No first
  • Haskell 中的素筛

    我对 Haskell 很陌生 我只是想找到前 200 万个素数的总和 我正在尝试使用筛子生成素数 我认为埃拉托色尼筛子 但它真的很慢 我不知道为什么 这是我的代码 sieve x xs x sieve filter a gt a mod x
  • 使用entityManager.createNativeQuery(query,foo.class)

    我想从 a 返回一个整数列表 javax persistence EntityManager createNativeQuery call 为什么下面的说法是错误的 entityManager createNativeQuery Selec
  • Altair 图表上方的动态文本

    在下面代码生成的图表中 用户可以将鼠标悬停在线段上以在图表上显示一个点 并且该点的信息显示在图表上方 import altair as alt import numpy as np import pandas as pd df pd Dat
  • 类似命名元组的类

    当我需要一个快速的一次性类时 我发现自己经常在我的 python 代码中编写这个类 class Struct object def init self kwargs for k in kwargs setattr self k kwargs