Skip to content

Instantly share code, notes, and snippets.

@DamianZaremba
Last active December 10, 2015 18:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save DamianZaremba/4472500 to your computer and use it in GitHub Desktop.
Save DamianZaremba/4472500 to your computer and use it in GitHub Desktop.
from django.db import models
class DeviceA(object):
def do_something(self, string='Hello'):
print "Device A something '%s'" % string
def do_something_else(self):
print "Device A something else"
class DeviceB(object):
def do_something(self, string='Hello'):
print "Device B something '%s'" % string
def do_something_else(self):
print "Device B something else"
class DeviceC(object):
def do_something(self, string='Hello'):
print "Device C something '%s'" % string
def do_something_else(self):
print "Device C something else"
class Device(models.Model):
_device_class = None
DEVICE_TYPES = (
('A', 'Device A'),
('B', 'Device B'),
('C', 'Device C'),
)
type = models.CharField(max_length=1, choices=DEVICE_TYPES)
def __init__(self, *args, **kwargs):
super(Device, self).__init__(*args, **kwargs)
if self.type == 'A':
self._device_class = DeviceA
elif self.type == 'B':
self._device_class = DeviceB
elif self.type == 'C':
self._device_class = DeviceC
def __getattr__(self, name):
if hasattr(self._device_class, name):
return self._device_class.__getattribute__(name)
def __setattr__(self, *args, **kwargs):
return self._device_class.__setattr__(*args, **kwargs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment