我使用基类构造函数作为工厂,并在这个构造函数/工厂中更改类以选择合适的类——这种方法是好的 python 实践还是有更优雅的方法?
我试图阅读有关元类的帮助,但没有取得很大成功。
这是我在做什么的例子。
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
有了这段代码,我可以通过基类 Project 创建 ProjectLocal/ProjectRemote 的实例:
project = Project('http://example.com')
project.do_something()
我知道另一种方法是使用将基于 url 返回类对象的结构函数,然后代码看起来相似:
def project_factory(url):
if is_url_local(url):
return ProjectLocal(url)
else:
return ProjectRemote(url)
project = project_factory(url)
project.do_something()
我的第一种方法只是口味问题还是有一些隐藏的陷阱?