### traditional [python]

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 [python]

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)