Есть дерево наследования, обрабатывающее HTTP запросы. И есть острое желание сделать работу “фабрики классов” (если этот термин вообще можно здесь применить) пошаговой, с определением конкретных типов по мере углубления в реальную структуру сайта, примерно так:
class Root(object):
def __init__(self):
self.__status = {200: 'Ok', 404: 'NotFound',}
self.__headers = []
def SetStatus(self, status_code):
self.__headers.append('Status: %d %s' % status_code, self.__status[status_code])
def Reply(self, url):
if self.__BadUrl(url):
self.SetStatus(404)
content = None
else:
if url.startswith('/admin'):
self.__class__ = AdminEngine
else:
self.__class__ = UserEngine
content = self.Reply(url)
r = '\n'.join(self.__headers) + '\n\n'
if content: r += content
return r
class AdminEngine(Root):
def Reply(self, url):
self.SetStatus(200)
if self.LogOnSuccess():
self.__InitDB('adminlogin', 'adminpass')
return self.InnerShrine()
else: return self.LogOn()
Выделить фабрику классов в чистом виде? Ей придется слишком много знать о структуре сайта.
Отказаться от функциональности базового класса (пока ее не так уж и много, но разработка в самом разгаре) и унаследовать “детей” от object?