class Translator(object): ac = None dictionaries = {'english_spanish':{'hello world':'hola mundo', "i'm just backwards":'Solo soy al reves'}} Ac = None #place holder for class level access def __init__(self, c): self.ac = c # tying to find a way to get class level access from AdapterMethods for this. def to_adapter(self, phrase): r = self.by_lang(phrase, self.ac.lang) return r ''' class level version @classmethod def to_adapter(cls, phrase): r = self.by_lang(phrase, cls.Ac.lang) return r ''' @classmethod def by_lang(cls, phrase, lang=None): d = cls.get_dictionary(lang) if isinstance(d, dict): for k, v in d.items(): if phrase in k: return v return phrase else: return d @classmethod def get_dictionary(cls, lang='english'): for k, v in cls.dictionaries.items(): if lang in k: k = k.split('_') if lang == k[0]: return {v:k for k,v in v.items()} else: return v return "We don't know that language." class BaseApi(object): def __init__(self, c): self.c = c def say(self, phrase): return self.c.translate(phrase) class BaseClass(object): tr = Translator api = BaseApi lang = 'english' id = 'baseclass' slogan = 'base slogan' def __init__(self): self.tr = Translator(self) # instance level access # self.tr.Ac = self # class level access (bad idea?) self.api = self.api(self) # operations methods def split(self, string): l = string.split(':') prefix = l[0] try: phrase = l[1] except: phrase = prefix prefix = '' return (phrase, prefix) def process_translate(self, phrase, prefix): return prefix+': '+phrase if prefix else phrase # adapter methods def translate(self, phrase): phrase, prefix = self.split(phrase) phrase = self.tr.to_adapter(phrase) return (phrase, prefix) def get_slogan(self): slogan = self.slogan return self.id+"'s slogan is: "+slogan # AdapterClass class DislexiaApi(BaseApi): def yas(self, phrase): hdys = super(DislexiaApi, self).say(phrase) return hdys class DislexiaClass(BaseClass): id = "dislexia" lang = 'english' slogan = "sdrawkcab tsuj m'i" api= DislexiaApi def make_dislexic(self, string): return string[::-1] def translate(self, phrase): phrase, prefix = super(DislexiaClass, self).translate(phrase) phrase = self.make_dislexic(phrase) return self.process_translate(phrase, prefix) # Wrapper class returns the api of all Adapters. Nice and clean. class WrapperClass(): adapters = [DislexiaClass] def __init__(self): for adapter in self.adapters: setattr(self, adapter.id, adapter().api) # Translator print Translator.by_lang('hello world', 'spanish') print Translator.by_lang('hola mundo', 'english') # AdapterClass d = DislexiaClass() slogan = d.get_slogan() print slogan d.translate(slogan) # WrapperClass w = WrapperClass() wd = w.dislexia print wd.yas('hello world') print wd.yas('hola mundo') print wd.c.translate(wd.yas('hola mundo'))
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question