Skip to content

Instantly share code, notes, and snippets.

@tlamer
Last active August 1, 2017 14:15
Show Gist options
  • Select an option

  • Save tlamer/2d01489ae7cd6cd9f366e23e6a3201ff to your computer and use it in GitHub Desktop.

Select an option

Save tlamer/2d01489ae7cd6cd9f366e23e6a3201ff to your computer and use it in GitHub Desktop.
factory example
#!/usr/bin/env python3
import abc
from abc import ABCMeta
class FactoryItem(metaclass=ABCMeta):
def __init__(self, data):
self.arg1 = int(data.split()[0])
self.arg2 = int(data.split()[2])
@classmethod
@abc.abstractmethod
def wants(cls, data):
pass
@abc.abstractmethod
def awesome_method():
pass
class Factory():
classes = []
@staticmethod
def register(itemClass):
Factory.classes.append(itemClass)
return itemClass
@staticmethod
def create(data):
for cls in Factory.classes:
if cls.wants(data):
return cls(data)
return None
@staticmethod
def create_direct(cls, data):
print(cls)
return cls(data)
@Factory.register
class MyItem1(FactoryItem):
@classmethod
def wants(cls, data):
return "+" in data
def awesome_method(self):
return self.arg1 + self.arg2
@Factory.register
class MyItem2(FactoryItem):
@classmethod
def wants(cls, data):
return "-" in data
def awesome_method(self):
return self.arg1 - self.arg2
a = Factory.create("1 + 2")
print(a.awesome_method())
b = Factory.create("1 - 2")
print(b.awesome_method())
c = Factory.create_direct(MyItem1, "1 - 2")
print(c.awesome_method())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment