- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我已经开始使用这样的结构:
class DictObj(object):
def __init__(self):
self.d = {}
def __getattr__(self, m):
return self.d.get(m, None)
def __setattr__(self, m, v):
super.__setattr__(self, m, v)
更新:基于此线程,我已将 DictObj 实现修改为:
class dotdict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__= dict.__setitem__
__delattr__= dict.__delitem__
class AutoEnum(object):
def __init__(self):
self.counter = 0
self.d = {}
def __getattr__(self, c):
if c not in self.d:
self.d[c] = self.counter
self.counter += 1
return self.d[c]
其中 DictObj 是可以通过点符号访问的字典:
d = DictObj()
d.something = 'one'
我觉得它比 d['something']
更美观。请注意,访问未定义的键会返回 None 而不是引发异常,这也很好。
更新:Smashery 提出了一个很好的观点,mhawke 对此进行了扩展以获得更简单的解决方案。我想知道使用 dict 而不是定义新字典是否有任何不良副作用;如果没有,我非常喜欢 mhawke 的解决方案。
AutoEnum 是一个自增枚举,使用如下:
CMD = AutoEnum()
cmds = {
"peek": CMD.PEEK,
"look": CMD.PEEK,
"help": CMD.HELP,
"poke": CMD.POKE,
"modify": CMD.POKE,
}
两者对我来说都很好,但我对它们感到很奇怪。
这些实际上是坏的结构吗?
最佳答案
您的 DictObj 示例实际上很常见。如果您正在处理“类似于对象的事物”,那么对象样式的点符号访问可能是一个胜利,即。它们具有固定的属性名称,仅包含在 Python 标识符中有效的字符。诸如数据库行或表单提交之类的东西可以有用地存储在这种对象中,从而使代码更具可读性,而无需过多的 ['item access']。
实现有点受限——你不会得到 dict、len()、comparisons、'in'、iteration 或 nice reprs 这样的构造函数语法。你当然可以自己实现这些东西,但是在新风格类的世界里,你可以通过简单地继承 dict 来免费获得它们:
class AttrDict(dict):
__getattr__ = dict.__getitem__
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
要获得 default-to-None 行为,只需子类化 Python 2.5 的 collections.defaultdict 类而不是 dict。
关于python - 字典键的Javascript样式点符号unpythonic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224026/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在和我的一位同事争论,是否所有的 Python 类真的都需要是可散列的。我们有一个包含符号表达式的类(类似于 SymPy)。 我的论点是,由于我们无法比较两个表达式是否相等,因此不应允许散列。例如
考虑执行以下操作的这两个函数:给定一个单词,它生成一个列表,其中单词中的每个位置都被字母表中的每个字符替换 alphabet = 'abcdefghijklmnopqrstuvwxyz' 版本 1(P
我的同事刚刚指出我对内部类的使用似乎是“unpythonic”的。我猜它违反了“平面优于嵌套”的启发式。 这里的人怎么看?内部类是否比 Python 更适合 Java 等? 注意:我不认为这是一个“主
例如,我想使用numpy 的isnan 函数。我已经加载了 pandas 库: import pandas as pd pd.np.isnan(1) #=> False 这行得通,但有什么缺点吗?或者
在设计类时,抽象方法会很有帮助。据我所知,Python 没有强制继承类实现抽象方法的机制。在我的代码中(参见下面的示例),我在基类中输入了一个失败的断言,如果未实现则导致运行时错误。这是 unpyth
最近有人向我展示了我们可以像 Perl 那样在 Python 中打印变量。 代替: print("%s, %s, %s" % (foo, bar, baz)) 我们可以做: print("%(foo)
我是一名优秀的程序员,十分优秀!