2016-08-13 4 views
0

テキストファイル入力から派生クラスを初期化しようとしています。Pythonはクラスメソッドを使用してクラスとベースクラスを初期化します

file.txtを::

1 
2 

main.py:私が何をしようとしています何の簡単な例

class Base: 
    def __init__(self, val1): 
     self.val1 = val1 
    def input_from_text(cls, init_deque): 
     #return cls(init_deque.popleft()) 

class Derived(Base): 
    def __init__(self, val1, val2): 
     Base.__init__(self, val1) 
     self.val2 = val2 
    def input_from_text(cls, init_deque): 
     #initialize base and derived here and return derived 

def main(argv=None): 
    initialized_derived = Derived.input_from_text(deque(open("file.txt"))) 
    assert initialized_derived.val1 is 1 
    assert initialized_derived.val2 is 2 

はこれを行うには良い方法はありますか?基本的にはあなたが持つC++で見つけるだろうものと同様のものを探して:

//calls operator>>(Base) then operator>>(Derived) 
cin >> initialized_derived; 

各クラスがうまくカプセル化されている。この方法で、ベース/派生クラスは、お互いについて何(除くを知っている必要はありません知っている__init__ argsの基数が取る数)。

答えて

1

私はこれを間違った方法で行っていることに気付きました。簡単な修正は、次のようなことを行うことです:

class Base: 
    def __init__(self): 
     pass 
    def input_from_text(self, init_deque): 
     self.val1 = init_deque.popleft() 

class Derived(Base): 
    def __init__(self): 
     Base.__init__(self) 
    def input_from_text(self, init_deque): 
     Base.input_from_text(self, init_deque) 
     self.val2 = init_deque.popleft() 
関連する問題