traditional
- import domain_specific
- class Generator(object):
- def load(self, value):
- if isinstance(value, (int, long)):
- self.push_int(self.value)
- elif isinstance(value, (basestring,)):
- self.push_string(self.value)
- elif isinstance(value, (domain_specific.Namespace,)):
- self.push_namespace(self.value)
- elif isinstance(value, (domain_specific.QName,)):
- self.push_qname(self.value)
zope
- from zope.interface import Interface
- from magic import adapt, Adapter
- import domain_specific
- class IArgument(Interface):
- def generate(bytecodes):
- pass
- @adapt([int, long], IArgument)
- class IntAdapter(Adapter):
- def generate(self, bytecodes):
- bytecodes.push_int(self.value)
- @adapt([basestring], IArgument)
- class StringAdapter(Adapter):
- def generate(self, bytecodes):
- bytecodes.push_string(self.value)
- @adapt([domain_specific.Namespace], IArgument)
- class NamespaceAdapter(Adapter):
- def generate(bytecodes):
- bytecodes.push_namespace(self.value)
- @adapt([domain_specific.QName], IArgument)
- class QNameAdapter(Adapter):
- def generate(bytecodes):
- bytecodes.push_qname(self.value)
- class Generator(object):
- def load(self, value):
- IArgument(value).generate(self)