Mit base Konstruktor der Klasse als Fabrik in Python?

Ich bin mit der Basis-Konstruktor der Klasse, die als Fabrik-und Wechsel-Klasse in diesem Konstruktor/Fabrik, um die Auswahl der geeigneten Klasse-ist dieser Ansatz gut ist python der Praxis oder gibt es elegantere Möglichkeiten?

Habe ich versucht zu Lesen, Hilfe zu Metaklassen, aber ohne großen Erfolg.

Hier Beispiel von dem, was ich Tue.

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

Mit diesem code kann ich die Instanz erstellen von ProjectLocal/ProjectRemote über Basis-Klasse-Projekt:

project = Project('http://example.com')
project.do_something()

Ich weiß, dass die Alternative Möglichkeit ist der Einsatz von Gewebe-Funktion, wird wieder das class-Objekt basierend auf url, dann code sieht ähnlich aus:

def project_factory(url):
      if is_url_local(url):
        return ProjectLocal(url)
      else:
        return ProjectRemote(url)

project = project_factory(url)
project.do_something()

Ist mein Erster Ansatz, einfach nur Geschmackssache oder hat es einige versteckte Fallstricke?

InformationsquelleAutor bialix | 2009-02-13
Schreibe einen Kommentar