2

我想要一个从名为 MyObject 的类的对象到整数的映射。我在这里读了一些东西,但什么都不懂,这似乎不是我想要的。哈希函数只能用于碰撞。我想要做的是通过将对象作为参数来检索值(整数)。基本上我要寻找的是一个从 MyObject 到整数的函数(用数学术语来说)。

所以假设这是我的类的定义:

class MyObject:
    def __init__(self,number):
        self.name = name
        self.marked=False

所以例如

a=MyObject("object 1")
b=MyObject("object 2")

现在我想要一些像 f 这样的映射,我可以将 25 分配给 a,将 36 分配给 b。并且能够得到:

f(a)=25
f(b)=36
4

6 回答 6

6

我不完全理解你的问题。我的解释是你想使用对象来索引一些整数。如果这是意图,您可以使用dict.

class MyClass:
    # your code here

c1 = MyClass()
c2 = MyClass()

D = dict({c1:1,c2:2})

D[c1] # will return 1
D[c2] # will return 2
于 2013-06-21T20:11:46.710 回答
1

从您的问题来看,您似乎希望将对象作为字典的键:

d = {a: 25, b: 36}
assert d[a] == 25

但这没有多大意义,因为您可以将数字直接存储在对象中。

class MyObject:
    def __init__(self, name, number):
        self.name = name
        self.number = number

a = MyObject("a", 25)
b = MyObject("b", 36)

也许您需要将数字与对象相关联?

d = {25: a, 36: b}
assert d[25] == a
于 2013-06-21T20:17:03.760 回答
1

您似乎在谈论 id() 函数。从手册:返回对象的“身份”。这是一个整数(或长整数),保证该对象在其生命周期内是唯一且恒定的。具有非重叠生命周期的两个对象可能具有相同的 id() 值。

于 2013-06-21T20:10:44.473 回答
0

您不能以这种方式使用分配运算符:“my_object_instance=number”,但您可以重载其他一些运算符,例如,“<<”:

class MyObject:
    def __init__(self,name):
        self.name = name
    def __lshift__(self, num):
        self.name = str(num)

def f(a):
    return a

a = MyObject(100)
print(a.name)

f(a) << 10
print(a.name)

http://ideone.com/whn20i

于 2013-06-21T20:33:28.713 回答
0

这个怎么样:

id(myObj)

这应该返回对象 ID(作为整数)

根据您的编辑,字典应该做您想做的事:

# a and b are instances of your object
f = {}
f[a] = 25
f[b] = 36

然后你可以访问整数:

print f[a]
>>> 25
于 2013-06-21T20:10:42.097 回答
0

你是这个意思吗?

class MyObject:
    def __init__(self,name):
        self.name = name
        self.number = None

a = MyObject("a")
a.number = 25

f = lambda x : x.number
print f(a) #prints 25
于 2013-06-21T20:19:08.290 回答