我必须怎么做才能将自定义类型的对象用作Python字典中的键(我不希望“对象id”用作键),例如
class MyThing:
def __init__(self,name,location,length):
self.name = name
self.location = location
self.length = length
如果名称和位置相同,我想将MyThing用作相同的键。从C#/
Java开始,我习惯于重写并提供一个equals和hashcode方法,并保证不会突变该hashcode依赖的任何内容。
我必须在Python中做什么才能完成此任务?我应该吗?
(在一个简单的例子中,就像这里一样,也许最好将一个(名称,位置)元组作为键-但考虑到我希望键成为一个对象)
您需要添加2种方法,注意__hash__
和 __eq__
:
class MyThing:
def __init__(self,name,location,length):
self.name = name
self.location = location
self.length = length
def __hash__(self):
return hash((self.name, self.location))
def __eq__(self, other):
return (self.name, self.location) == (other.name, other.location)
def __ne__(self, other):
# Not strictly necessary, but to avoid having both x==y and x!=y
# True at the same time
return not(self == other)
Python dict文档对关键对象定义了这些要求,即它们必须是可哈希的。
想给方法自定义数据类型,通过资料查到可以用 dataclass 这样就很简洁,但貌似传入必须是实例化的方式,我更希望是字典的形式,请问有什么简洁的好的方法?
下面的代码没有给我正确的答案。 这给出; 一般来说,若给定了点的数组列表,我们如何在数组中找到特定点的索引?
我得到一个错误: 我确信这是一个已知的范例,因为它似乎是一个非常常见的层次类使用问题(自引用类)。我知道我可以将
我创建了一个简单的类型: 现在我想初始化一个已经声明的变量(当前值=0),其结果为 现在,TypeScript告诉我,类型号不能赋给CustomType类型,即使初始化应该工作,只要数字是0、1、2、3、4或5的整数。: TS2322:类型“number”不能赋给类型“CustomType”。 不幸的是,到目前为止,我没有找到任何解决方案。转换为标准类型很好,但我不确定如何使我的自定义类型接受一个
问题内容: 您是否知道是否有内置函数可以从任意对象构建字典?我想做这样的事情: 注意:它不应包含方法。仅字段。 问题答案: 请注意,Python 2.7中的最佳实践是使用新型类(Python 3不需要),即 同样,“对象”和“类”之间也存在差异。要从任意对象构建字典,只需使用即可。通常,您将在类级别声明方法,并在实例级别声明属性,因此应该没问题。例如: 更好的方法(由robert建议在注释中使用)
Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。