2016-08-08 3 views
0

私はそれだけ「工場」によってのみ作成できるクラスから派生することはできますか?

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

を経由してインスタンス化するためのものだ

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

実装にクラスを使用していますライブラリは私がメソッドのカップルを追加することにより、Baseクラスを拡張したいと仮定それ:

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

プライベートAPIを呼び出さずにDerivedを初期化することはできますか?

つまり、factory機能の代替品は何ですか?

答えて

0

あなたはプライベートAPIへのアクセスを持っていない場合は、次のことを行うことができます。メインスクリプトで

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): 
     ... 

そして今:

#!/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

をしかし、あなたはありませんこれ以上継承:Baseインスタンスと同じようにDerivedインスタンスを使用することはできません。それは本当に全体のポイントです。 – MaxB

関連する問題