2016-08-08 102 views
0

Nehmen wir an, eine Bibliothek ich implementiert eine KlasseKann ich von einer Klasse ableiten, die nur von einer "Fabrik" erstellt werden kann?

class Base(object): 
    def __init__(self, private_API_args): 
     ... 

Es soll nur mit über

def factory(public_API_args): 
    """ 
    Returns a Base object 
    """ 
    ... 

auszuprägen Ich möchte die Base Klasse erweitern durch Hinzufügen von ein paar Methoden zu es:

class Derived(Base): 
    def foo(self): 
     ... 
    def bar(self): 
     ... 

Ist es möglich, zu initialisieren Derived obwohl die private API ohne Aufruf?

Mit anderen Worten, was sollte mein Ersatz für die factory Funktion sein?

Antwort

0

Wenn Sie keinen Zugriff auf den privaten API haben, können Sie das Folgende tun:

class Base(object): 
    def __init__(self, private_API_args): 
     ... 


def factory(public_API_args): 
    """ Returns a Base object """ 
    # Create base object with all private API methods 
    return base_object 


class Derived(object): 
    def __init__(self, public_API_args): 
     # Get indirect access to private API method of the Base object class 
     self.base_object = factory(public_API_args) 

    def foo(self): 
     ... 
    def bar(self): 
     ... 

Und jetzt im Haupt Skript:

#!/usr/bin/python3 

# create the derivate object with public API args 
derived_object = Derived(public_API_args) 

# to call private API methods 
derived_object.base_object.method() 

# to call your method from the same object 
derived_object.foo() 
derived_object.bar() 
+0

Aber Sie haben nicht die Vererbung nicht mehr: Sie können abgeleitete Instanzen nicht wie Basisinstanzen verwenden. Das ist wirklich der springende Punkt. – MaxB