Ich versuche, zu testen und beheben a bug in pprint++ (edit: the correct link; original link left for posterity), die nach oben kommen, weil der instancemethod
Typ nicht hashable ist:Wo finde ich eine Instanzmethode in der Python 3-Standardbibliothek?
In [16]: import pandas as pd
In [17]: type(pd.tslib.NaT).__repr__
Out[17]: <instancemethod __repr__ at 0x1058d2be8>
In [18]: hash(type(pd.tslib.NaT).__repr__)
...
TypeError: unhashable type: 'instancemethod'
Aber ich habe Probleme für dieses Problem testen habe, weil ich don‘ Ich weiß, wo ich sonst noch einen instancemethod
in der Python 3-Standardbibliothek finden kann, und ich möchte nicht, dass meine Tests von Pandas abhängen.
Insbesondere scheint es, wie die „normale“ eingebaute Typen haben „Instanzmethoden“, die etwas anders umgesetzt werden:
In [19]: type(None).__repr__
Out[19]: <slot wrapper '__repr__' of 'NoneType' objects>
In [20]: hash(type(None).__repr__)
Out[20]: -9223372036583849574
Also: Wo kann ich ein instancemethod
in der Python-3-Standard-Bibliothek zu finden, so kann ich Versuche dagegen schreiben? Oder ist es ein spezieller Typ, der dort nicht erscheint?
(Anmerkung: dies scheint nur 2 Python 3, als die gleiche Methode in Python zu beeinflussen ist ein unbound method
, die hashable ist)
Wenn Hilfe, 'instancemethod' in 'C' umgesetzt wird in' classobject.c' siehe [hier] (https://github.com/python /cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Objects/classobject.c#L608). –
Ich bin nicht sicher, ob der Link das ist, was Sie veröffentlichen wollten. –
Das sieht richtig aus. Wenn Sie den Code jedoch schnell durchlesen, werden keine Instanzen angezeigt, in denen er in der Codebasis cpython3 verwendet wird. Möglicherweise ist es nicht, und es wird nur von Erweiterungen verwendet? –