python - 散列 Python 类是个好主意吗?

标签 python class inheritance hash dictionary

例如,假设我这样做:

>>> class foo(object):
...     pass
... 
>>> class bar(foo):
...     pass
... 
>>> some_dict = { foo : 'foo',
... bar : 'bar'}
>>> 
>>> some_dict[bar]
'bar'
>>> some_dict[foo]
'foo'
>>> hash(bar)
165007700
>>> id(bar)
165007700

基于此,该类似乎被散列为它的 ID 号。因此,不应该担心将 bar 散列为 foobar 或更改散列值的任何危险如果我改变类。

这种行为是否可靠,或者这里有什么问题吗?

最佳答案

是的,任何未实现 __hash__() 函数的对象都将在散列时返回其 id。来自 Python Language Reference: Data Model - Basic Customization :

User-defined classes have __cmp__() and __hash__() methods by default; with them, all objects compare unequal (except with themselves) and x.__hash__() returns id(x).

但是,如果您希望拥有唯一标识符,请使用 id 来明确您的意图。对象的散列应该是其组件散列的组合。有关详细信息,请参阅上面的链接。

关于python - 散列 Python 类是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335556/

相关文章:

java - 使用 Super/Sub 类型重载方法/构造函数

c# - 在 C++ 中允许的函数在 C# 中不允许?

c++ - 使用彼此继承的类的模板化类实例之间的隐式转换

java - 如何创建一个可以存储多个对象的arraylist类?

java - 当创建一个类的多个实例时,会生成多少个方法副本?

javascript - 自引用类

python - DataFrame 中的时间计算和操作分组

python - 简单(有效)手写数字识别: how to improve it?

python - 从可检查的组合框中捕获操作

python - 如何在单列的 Pandas 数据框上追加新行?