metaprogramming examples

This commit is contained in:
Luciano Ramalho
2015-01-01 10:21:37 -02:00
parent 7a268a5b43
commit 8e2b8d90e5
18 changed files with 13902 additions and 11 deletions

23
descriptors/model_v4c.py Normal file
View File

@@ -0,0 +1,23 @@
# BEGIN MODEL_V4
class Quantity:
__counter = 0
def __init__(self):
cls = self.__class__
prefix = cls.__name__
index = cls.__counter
self.storage_name = '_{}_{}'.format(prefix, index)
cls.__counter += 1
def __get__(self, instance, owner):
if instance is None:
return self
else:
return getattr(instance, self.storage_name)
def __set__(self, instance, value):
if value > 0:
setattr(instance, self.storage_name, value)
else:
raise ValueError('value must be > 0')
# END MODEL_V4