Skip to content

Instantly share code, notes, and snippets.

@macndesign
Created October 4, 2015 02:56
Show Gist options
  • Save macndesign/1d3113096edf96ef54e4 to your computer and use it in GitHub Desktop.
Save macndesign/1d3113096edf96ef54e4 to your computer and use it in GitHub Desktop.
Exemplo de descritores em python
class Quantidade(object):
def __init__(self):
self.nome_alvo = None
self.set_nome(self.__class__.__name__, id(self))
def set_nome(self, prefix, key):
self.nome_alvo = '%s_%s' % (prefix, key)
def __get__(self, instance, owner):
return getattr(instance, self.nome_alvo)
def __set__(self, instance, value):
if value > 0:
setattr(instance, self.nome_alvo, value)
else:
raise ValueError('Valor deve ser maior que zero')
class ModeloMeta(type):
def __init__(cls, nome, bases, dic):
super(ModeloMeta, cls).__init__(nome, bases, dic)
for chave, atr in dic.items():
if hasattr(atr, 'set_nome'):
atr.set_nome('__' + nome, chave)
class Modelo(object):
__metaclass__ = ModeloMeta
class ItemPedido(Modelo):
peso = Quantidade()
preco = Quantidade()
def __init__(self, peso, preco, descricao):
self.peso = peso
self.preco = preco
self.descricao = descricao
def subtotal(self):
return self.peso * self.preco
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment