Я пытаюсь реализовать обертку вокруг базы данных redis, которая выполняет некоторую бухгалтерию, и я подумал об использовании дескрипторов. У меня есть объект с кучей полей: рамки, сбои и т. Д., И мне нужно иметь возможность получить, и при необходимости увеличивать поле. Я пытался реализовать дескриптор Int-Like:Способы дескрипторов
class IntType(object):
def __get__(self,instance,owner):
# issue a GET database command
return db.get(my_val)
def __set__(self,instance,val):
# issue a SET database command
db.set(instance.name,val)
def increment(self,instance,count):
# issue an INCRBY database command
db.hincrby(instance.name,count)
class Stream:
_prefix = 'stream'
frames = IntType()
failures = IntType()
uuid = StringType()
s = Stream()
s.frames.increment(1) # float' object has no attribute 'increment'
Is кажется, что я не могу получить доступ к инкременту() метод в моем дескрипторе. У меня не может быть указателя в объекте, возвращаемом __get__. Для этого потребуется дополнительный db-запрос, если все, что я хочу сделать, - это увеличение! Я также не хочу increment() в классе Stream, так как позже, когда я хочу иметь дополнительные поля, такие как строки или множества в Stream, тогда мне нужно будет набрать check heck из всего.
Я не думаю, что это решает ничего. – proteneer