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