Python中对象的数字表示

时间:2012-02-21 09:03:45

标签: python random

我基本上想要将Python对象转换为固定长度的数字(不是字母数字)值。一种方式,我想出来的是,

import random
x = Car(brand='toyota', model='corolla', price='10000', year=1997)
random.seed(x)

random.random()
0.13436424411240122

random.seed(x)
random.random()
0.13436424411240122

我想知道是否有更方便和通用的方式(或库)来使这项工作?

5 个答案:

答案 0 :(得分:1)

def convertObjectIntoFixedLengthNumeric(obj):
    return 17

x = Car(brand='toyota', model='corolla', price='10000', year=1997)
convertObjectIntoFixedLengthNumeric(x)
17

非常方便和通用。如果不是您想要的,请提供更多信息..

答案 1 :(得分:1)

您现在使用的方式是:

  • 容易发生Car对象中的拼写错误。
  • 如果您忘记每次都致电random.seed(),那就很脆弱。
  • 区分大小写。

另外,如果我是你,我想对我的号码生成方式有一点控制。

其他答案已经向您展示了hashlib的存在。

我可能会这样使用它:

class Car:
    # ...
    def __hash__(self):
        md5 = hashlib.md5()
        for i in ('brand', 'model', 'price', 'year'):
            attr = getattr(self, i)
            md5.update(str(attr).lowercase())
        return int(md5.hexdigest(), 16)

关于整数转换的参考:Convert 32-char md5 string to integer

答案 2 :(得分:0)

您可能需要查看内置的id-function。它返回一个对象的内存地址,它始终是唯一的,只要你不比较已经垃圾回收的对象的id。

答案 3 :(得分:0)

获取您关心的所有属性并对其进行哈希处理。

class Car(...):
   ...
  def __hash__(self):
    return hash((self.brand, self.model, self.price, self.year))

 ...

print hash(x)

答案 4 :(得分:0)

你在谈论hash function。我认为您需要提供更多信息,以获得有用的答案。