metaprogramming examples
This commit is contained in:
23
descriptors/model_v4c.py
Normal file
23
descriptors/model_v4c.py
Normal 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
|
||||
Reference in New Issue
Block a user