使用 python class 变量作为字典键是好习惯吗?
Using python class variables as dict key is good practice?
我想知道如果我使用 class 变量作为字典中的键是否可以被认为是一种好的做法?
例如,这是 peewee 中的对象模型。
class Abc:
name = CharField()
age = IntegerField()
然后我像这样为它声明一个配置字典
conf = {Abc.name: Config(listable=False, format_on_edit=True), Abc.age: Config()}
我不想使用 name
、age
之类的字符串作为字典键,因为我害怕输入错误,并且想确保对象/模型字段有效。
我看到 Sqlalchemy 或 Peewee 正在使用 where(Abc.name=='abc')
或 filter(User.age == 25)
之类的条件,而不是像 Go 中的许多其他 orms 或 PHP 那样使用 where('name', 'abc')
,因为它们没有class 个变量。
防止打错的效果还是不错的。
我试过 hash(Abc.name)
并且它工作 class 变量 是否不可变用作字典键?
您可以放心使用它们。 Peewee 将您声明为模型属性的字段实例替换为特殊的 Descriptor 对象(然后公开可哈希的基础字段实例)。
例如,执行插入或更新时,您可以使用字段作为键来指定数据:
User.insert({User.username: 'charlie'}).execute()
我想知道如果我使用 class 变量作为字典中的键是否可以被认为是一种好的做法? 例如,这是 peewee 中的对象模型。
class Abc:
name = CharField()
age = IntegerField()
然后我像这样为它声明一个配置字典
conf = {Abc.name: Config(listable=False, format_on_edit=True), Abc.age: Config()}
我不想使用 name
、age
之类的字符串作为字典键,因为我害怕输入错误,并且想确保对象/模型字段有效。
我看到 Sqlalchemy 或 Peewee 正在使用 where(Abc.name=='abc')
或 filter(User.age == 25)
之类的条件,而不是像 Go 中的许多其他 orms 或 PHP 那样使用 where('name', 'abc')
,因为它们没有class 个变量。
防止打错的效果还是不错的。
我试过 hash(Abc.name)
并且它工作 class 变量 是否不可变用作字典键?
您可以放心使用它们。 Peewee 将您声明为模型属性的字段实例替换为特殊的 Descriptor 对象(然后公开可哈希的基础字段实例)。
例如,执行插入或更新时,您可以使用字段作为键来指定数据:
User.insert({User.username: 'charlie'}).execute()