【问题标题】:Using python class variables as dict key is good practice?使用 python 类变量作为 dict 键是好习惯吗?
【发布时间】:2019-06-16 18:56:11
【问题描述】:

我想知道我是否使用类变量作为字典中的键,这可以被认为是一种好习惯吗? 比如这是peewee中的对象模型。

class Abc:
    name = CharField()
    age = IntegerField()

然后我像这样为它声明一个配置字典

conf = {Abc.name: Config(listable=False, format_on_edit=True), Abc.age: Config()}

我不想使用像nameage 这样的字符串作为字典键,因为我害怕输入错误,并且想确保对象/模型字段有效。

我看到 Sqlalchemy 或 Peewee 使用像 where(Abc.name=='abc')filter(User.age == 25) 这样的条件,而不是像 Go 或 PHP 中的许多其他 orm 那样使用 where('name', 'abc'),因为它们没有类变量。

这对于防止输入错误非常有用。 我已经尝试过hash(Abc.name) 并且它可以工作,然后类变量对于用作 dict 键是不可变的

【问题讨论】:

  • 您听说过https://docs.python.org/3/library/enum.html 吗?这也是 django 吗?
  • @DeveshKumarSingh 我在其他上下文中使用枚举,但这是关于模型字段,许多字段是在一个模型对象中定义的,它们不是 ENUM 类型,并且配置字典用于模型对象.如果我将它们(字段名称)重新声明为 ENUM 类型,那将毫无用处。这不是 django
  • "那么类变量作为字典键使用是不可变的?"你在问什么?请注意,您没有使用类 variables 作为键,变量不能是键,对象是键,并且您正在使用类变量引用的对象在创建字典的那一刻 i> 作为键。如果这就是你要问的。
  • @juanpa.arrivillaga 是的,那你还没回答问题?
  • 我不明白你在问什么

标签: python dictionary peewee class-variables


【解决方案1】:

您可以安全地使用它们。 Peewee 将您声明为模型属性的字段实例替换为特殊的 Descriptor 对象(然后公开底层字段实例,这是可散列的)。

例如,在执行插入或更新时,您可以使用字段作为键来指定数据:

User.insert({User.username: 'charlie'}).execute()

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2016-06-01
    • 1970-01-01
    • 2010-12-05
    • 2021-07-23
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多