Code: Alles auswählen
is_immutable(objekt) in Boolean
Code: Alles auswählen
is_subclass(objekt,Immutable) in boolean
Noch interessanter wäre
Code: Alles auswählen
is_serializable(objekt) in boolean
Kennt jemand etwas zu diesem Thema?
Code: Alles auswählen
is_immutable(objekt) in Boolean
Code: Alles auswählen
is_subclass(objekt,Immutable) in boolean
Code: Alles auswählen
is_serializable(objekt) in boolean
Code: Alles auswählen
def is_ser(obj):
try:
marshal.dumps(obj)
except: #Weiß nicht, welcher Fehler hier abgefangen gehört...
return False
return True
wobei das letzte Ergebnis völliger Unsinn ist; es wird nur die Speicheradresse serialisiert und das Objekt kann danach weder identifiziert noch wiederhergestellt werden (oder gilt das etwa nicht mehr für Python3.x?). Dagegen haben wirDEBUG: is_ser with pickle.dumps(obj)
is_ser((2,3,4)) = True
DEBUG: is_ser with pickle.dumps(obj)
is_ser([[2],[3],[4]]) = True
DEBUG: is_ser with pickle.dumps(obj)
is_ser(range(5)) = True
DEBUG: is_ser with pickle.dumps(obj)
is_ser(range(5)) = True
DEBUG: is_ser with pickle.dumps(obj)
is_ser(meine_Klasse()) = True
was schon besser aussieht. Allerdings wird im Handbuch immer von der Benutzung von marshal abgeraten, da sich Python anscheinend die Freiheit nimmt, dieses Modul, rückwärts-inkompatibel zu verändern...DEBUG: is_ser with marshal.dumps(obj)
is_ser((2,3,4)) = True
DEBUG: is_ser with marshal.dumps(obj)
is_ser([[2],[3],[4]]) = True
DEBUG: is_ser with marshal.dumps(obj)
is_ser(list(range(5))) = True
DEBUG: is_ser with marshal.dumps(obj)
is_ser(range(5)) = False
DEBUG: is_ser with marshal.dumps(obj)
is_ser(meine_Klasse()) = False
Ich glaube, Du hast eine falsche Erwartung bzw. Vorstellung vom Serialisieren. Es handelt sich dabei nicht um einen Vorgang, der Dir ein exaktes Abbild eines bestehenden Zustandes liefert.Goswin hat geschrieben:(...) es wird nur die Speicheradresse serialisiert und das Objekt kann danach weder identifiziert noch wiederhergestellt werden (...)
Code: Alles auswählen
class Test(object):
def __init__(self, foo):
self.foo = foo
Code: Alles auswählen
>>> t = Test(10)
>>> t.foo
10
>>> pt = pickle.dumps(t)
>>> del t
>>> t = pickle.loads(pt)
>>> t.foo
10
>>> del t
>>> del Test
>>> t = pickle.loads(pt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.1/pickle.py", line 1363, in loads
encoding=encoding, errors=errors).load()
AttributeError: 'module' object has no attribute 'Test'
Unittests erstellen, um meinen Software-Umbau ("Refactoring") zu kontrollieren.mutetella hat geschrieben:Was hast Du eigentlich genau vor?
...und da dieses Ergebnis wieder ein Objekt wäre und kein String, wäre ich genau da angelangt, wo ich angefangen hätte. Nachträglich fällt mir ein: auch wenn das gepickelte Objekt ein String und kein Pickel-Code *wäre*, dann wäre immer noch nicht gesagt, dass dieser String von Version zu Version nicht verschieden sein kann. Mich auf eine Version festlegen sollte ich nicht, der Unittest wäre bei der nächsten Version unter Umständen wertlos. Ich werde also dazu übergehen, einen hash-Code für meine Ergebnisobjekte zu schreiben, auch wenn das etwas mehr Arbeit ist.BlackJack hat geschrieben:Pickles sind nicht eindeutig, soll heissen zwei verschiedene Pickles können beim entpickeln das gleiche Ergebnis haben.
Der Suchbaum einer Branch-and-Bound-Suche nach 20 Suchschritten. So ein B&B-Suchbaum kann nicht nur sehr groß sein, sondern hat auf jedem seiner Knoten auch noch verschachtelte Listen und massenweise andere Attribute. So ein Suchbaum ist natürlich nur ein Zwischenergebnis zur Lösung der Aufgabe, aber für meine Unittest muss ich gerade die Zwischenergebnisse überprüfen, da die Endlösung viel zu wenig über den Code eines einzelnen Moduls aussagt.mutetella hat geschrieben:Kannst Du mir vielleicht einmal ein konkretes Beispiel eines solchen Objektes oder eines seiner Attribute geben?
Gibt es eigentlich eine standarisierte marshal-Struktur? Ähnlich wie json, wobei json z. B. schon mal keinen Unterschied zwischen 'list' und 'tuple' macht. Aber an genau diesen Details scheitert ein solcher Standard wohl, oder?BlackJack hat geschrieben:Das was in so einem Pickle drin steckt ist im Grunde ein kleines Programm in der „Pickle-Sprache“, (...)