Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将对象映射为整数?_Python_Oop_Hash_Dictionary - Fatal编程技术网

如何在python中将对象映射为整数?

如何在python中将对象映射为整数?,python,oop,hash,dictionary,Python,Oop,Hash,Dictionary,我想要一个从MyObject类的对象到整数的映射。我读了一些东西,但什么都不懂,这似乎不是我想要的。散列函数 只能用于碰撞。我要做的是通过 将对象作为参数。基本上我寻找的是一个函数(用数学术语) 从MyObject到整数 假设这是我的类的定义: class MyObject: def __init__(self,number): self.name = name self.marked=False 比如说 a=MyObject("object 1") b

我想要一个从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
这个怎么样:

id(myObj)
这将返回对象id(作为整数)

从您的编辑中,词典应满足您的要求:

# a and b are instances of your object
f = {}
f[a] = 25
f[b] = 36
然后您可以通过以下方式访问整数:

print f[a]
>>> 25

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

我不完全理解你的问题。我的解释是,您希望使用对象来索引一些整数。如果这就是目的,您可以使用
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

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

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

这就是你的意思吗

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

您不能以这种方式使用赋值运算符:“my_object_instance=number”,但您可以重载其他运算符,例如,“如果您想将对象映射到任何对象,请使用哈希表。为此,您需要哈希和相等方法。@larsmans我在哪里可以阅读和了解它?@Naji如果您想
f(a)
将成为25岁,您是在声明
a=MyObject(25)
?还是将
a
仍声明为
a=MyObject(12)
?@想象不!对象有一个名称。但我还需要一个函数,如f,它将25分配给a,36分配给b,这是Nik设计的。无论如何,谢谢。当你想让对象b返回一些关于对象a的信息时,这是有意义的:)
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)