"New-Style"-Classes und Deskriptoren
Verfasst: Montag 12. Januar 2009, 18:02
Hallo zusammen,
ich habe in zusammenhang mit den New-Style-Classes von Deskriptoren gelesen und mir versucht, ein greifbares Beispiel zu generieren.
Sogesehen wollte ich in diesem exemplarischen Beispiel einen Datentypen generieren, welcher bei einem "Überlauf" wieder von 0 an zählt.
Spielereien, wie eine Nachricht an ein anderes Attribut habe ich jetzt mal außen vor gelassen.
Da die ganze Thematik doch sehr Abstrakt ist, stelle ich die Frage in den Raum, ob ich das Konzept so richtig aufgefasst habe, oder ob der Sinn dieser Konstruktion ein ganz anderer ist.
Grüße... Heiko
ich habe in zusammenhang mit den New-Style-Classes von Deskriptoren gelesen und mir versucht, ein greifbares Beispiel zu generieren.
Sogesehen wollte ich in diesem exemplarischen Beispiel einen Datentypen generieren, welcher bei einem "Überlauf" wieder von 0 an zählt.
Spielereien, wie eine Nachricht an ein anderes Attribut habe ich jetzt mal außen vor gelassen.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def mask(name, bits):
return '__reg%d_%s' % (bits, name)
class Register(object):
def __init__(self, name, bits=8):
self.name = name
self.bits = bits
def __get__(self, _object, _type):
if _object and _object.__dict__.has_key(mask(self.name, self.bits)):
return _object.__dict__[mask(self.name, self.bits)]
else:
return None
def __set__(self, _object, value):
if _object:
_object.__dict__[mask(self.name, self.bits)] = value % (2 ** self.bits)
class CPU(object):
accu = Register(name='accu')
ip = Register(name='ip', bits=16)
c0 = CPU()
c0.accu = 145
print c0.accu
c0.accu = 257
print c0.accu
c1 = CPU()
c1.accu = 56
print c1.accu != c0.accu
print dir(c0)
Grüße... Heiko