KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm using base class constructor as factory and changing class in this constructor/factory to select appropriate class -- is this approach is good python practice or there are more elegant ways? I've tried to read help about metaclasses but without big success. Here example of what I'm doing. class Project(object): "Base class and factory." def __init__(self, url): if is_url_local(url): self.__class__ = ProjectLocal else: self.__class__ = ProjectRemote self.url = url class ProjectLocal(Project): def do_something(self): # do the stuff locally in the dir pointed by self.url class ProjectRemote(Project): def do_something(self): # do the stuff communicating with remote server pointed by self.url Having this code I can create the instance of ProjectLocal/ProjectRemote via base class Project: project = Project('http://example.com') project.do_something() I know that alternate way is to using fabric function that will return the class object based on url, then code will looks similar: def project_factory(url): if is_url_local(url): return ProjectLocal(url) else: return ProjectRemote(url) project = project_factory(url) project.do_something() Is my first approach just matter of taste or it has some hidden pitfalls?
Tags (comma-separated)
Save Edits
Cancel