Python 重写peewee.Model对象上的_散列__;安全吗?
我最近注意到,我的一组引用相同数据的peewee模型对象没有被识别为等效对象,即使它们包含相同的数据 在这些人身上覆盖哈希安全吗?它似乎是可行的,但我不希望它在将来意外地回来咬我——散列会弄乱我应该担心的内部状态到记录的映射吗Python 重写peewee.Model对象上的_散列__;安全吗?,python,orm,peewee,Python,Orm,Peewee,我最近注意到,我的一组引用相同数据的peewee模型对象没有被识别为等效对象,即使它们包含相同的数据 在这些人身上覆盖哈希安全吗?它似乎是可行的,但我不希望它在将来意外地回来咬我——散列会弄乱我应该担心的内部状态到记录的映射吗 class User(PowertailMeta): name = CharField(unique=True) password = CharField(null=False) balance = FloatField(default=10.0)
class User(PowertailMeta):
name = CharField(unique=True)
password = CharField(null=False)
balance = FloatField(default=10.0)
cap = FloatField(default=60, constraints=[Check('cap >= 0')])
is_admin = BooleanField(default=False)
last_login = DateTimeField(default=datetime.now)
picture = CharField(default="porp")
def __hash__(self):
return hash(self.name) # since name is unique...
这通过了一些琐碎的测试,但我不确定我可能需要寻找什么。
\uuuuu散列\uuuuuu
最近已添加到peewee.Model
,请参阅。它还没有发布,但我认为它将出现在2.8.1中
实施相当简单:
def __hash__(self):
return hash((self.__class__, self._get_pk_value()))
(in)
因此,它依赖于模型类和主键。如果您有其他需要,我认为覆盖它没有任何问题。但是,根据您建议的解决方案,请考虑以下内容:
class User(Model):
name = CharField(unique=True)
def __hash__(self):
return hash(self.name)
class User(Model):
label = CharField(unique=True)
def __hash__(self):
return hash(self.label)
这是两个不同的模型,即使使用不同的字段,但它们会产生相同的哈希值