Python Design Patterns
# https://danluu.com/empirical-pl
class Python:
def __init__(self):
self.contexts = {'Programming Paradigm': 'Scripting', 'Compilation Class': 'Dynamic', 'Type Class': 'Strong'}
def summary(self, context):
return self.contexts.get(context, context)
class JavaScript:
def __init__(self):
self.contexts = {'Programming Paradigm': 'Scripting', 'Compilation Class': 'Dynamic', 'Type Class': 'Weak'}
def summary(self, context):
return self.contexts.get(context, context)
class CSharp:
def __init__(self):
self.contexts = {'Programming Paradigm': 'Procedural', 'Compilation Class': 'Static', 'Type Class': 'Strong'}
def summary(self, context):
return self.contexts.get(context, context)
def Factory(language='Python'):
languages = {
'Python': Python,
'JavaScript': JavaScript,
'CSharp': CSharp
}
return languages[language]()
python = Factory('Python')
javascript = Factory('JavaScript')
csharp = Factory('CSharp')
context = ['Programming Paradigm', 'Compilation Class', 'Type Class']
language = ['Python', 'JavaScript', 'CSharp']
for lang in language:
print(f'{lang}')
print(', '.join(f'{cntx}: {eval(lang.lower()).summary(cntx)}' for cntx in context))
print()