2012-02-21 14 views
-1

私は基本的に、Pythonオブジェクトを(英数字ではなく)固定長の数値に変換したいと考えています。一つの方法は、私はより多くのとても便利かつ一般的な方法(またはライブラリ)がある場合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 

が、私はこの仕事をするために思ったんだけど、である作ってみましたか?

ありがとうございます。

+1

ハッシュと呼ばれていませんか? ;) – delnan

答えて

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

1
def convertObjectIntoFixedLengthNumeric(obj): 
    return 17 

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

非常に便利で一般的です。あなたが探していたものではない場合は、いくつかの詳細情報を提供してください。

+0

私は言う:笑.... –

+0

いいです。よりユーモアのSO! – WeaselFox

+1

))http://xkcd.com/221/ – georg

0

id-functionを見ることができます。すでにガベージコレクションされたオブジェクトのIDを比較しない限り、オブジェクトのメモリアドレスは常に一意ですを返します。

0

気になる属性をすべて取り、ハッシュします。

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

... 

print hash(x) 
0

Youre talking about a hash function。私は、あなたが役に立つ答えを得るために必要なものについてより多くの情報を提供する必要があると思います。