2017-11-22 2 views
0

にクラスのすべてのインスタンスを取得これは、ファイルfiles.pyで私のクラスであるのpython

from files import File 

File(kwargs1="create", kwargs2="path/to/destination1", kwargs3="/path/to/source1",..........) 
File(kwargs1="create", kwargs2="path/to/destination2", kwargs3="/path/to/source2",..........) 

現在の状況は、各オブジェクトがあるということです妥当性を確認してから__create()または__remove()に進みます。私が尋ねるのは、すべてのオブジェクトを最初に検証してから進めることができるかどうかということです。 私はtasks.pyでそれを達成することができました。私は、パブリックメソッドcreate(self)remove(self)としてプライベートメソッド__create()__remove()を宣言しなければならなかったし、クラスは次のようになります。

class Files(): 

    def __init__(self, *, kwargs1=None, ......, kwargsx=None): 
     self.kwargs1 = kwargs1 
     ................... 
     ................... 
     ................... 
     self.kwargsx = kwargsx 

     __validate() 

    def __validate(): 
     validate attributes of object and raise execption if fails 

    def create(self): 
     create file 

    def remove(self): 
     remove file 

そしてtasks.py

files = [] 
try: 
    files.append(File(kwargs1="create", kwargs2="path/to/destination1", kwargs3="/path/to/source1",..........)) 
    files.append(File(kwargs1="create", kwargs2="path/to/destination2", kwargs3="/path/to/source2",..........)) 
except ValueError as e: 
    print(e) 
else: 
    for item in files: 
     if item.kwargsx == "create": 
      create(item) 
     elif item.kwargsx == "remove": 
      remove(item) 

実現することが可能であるならば私の質問ですFile自身のこのロジックは?私が考えることができる唯一の方法は、スタックを検査し、各オブジェクトの初期化を繰り返し実行することですが、動作するかどうかはわかりません。

答えて

0

これは一般的なスキームである - クラスのインスタンスへの参照を持っていない、

class File: 
    _instances = [] 
    def __init__(self, ..., action=None): 
     .... 
     self.action = action 
     File._instances.append(self) 

    @classmethod 
    def resolve_actions(cls): 
     for instance in cls._instances: 
      if instance.action == "create": 
       instance.__create() 
      elif instance.action == "remove": 
       instance.__remove() 

、その後どこかに私は1つによって、オブジェクト1の属性を検証し達成した

File.resolve_actions() 
+0

コードでたとえば、最初のインスタンスが作成されたらOK、2番目のオブジェクトが同じ場合です。私は、すべてのオブジェクトを1つずつチェックしてから、それぞれのアクションを実行したり、最初のオブジェクトを取得して保存したり、保存したり、保存したりします。各オブジェクトのアクション!そのようなシナリオは可能ですか? – Max

+0

@Max、私はあなたに一般的な計画を提供しました。ループでは、結果を累積して2番目のループで処理したり、別のクラス属性として設定したり、各インスタンスの作成ごとに決定を蓄積したり、すべてのインスタンスに対して再度実行したりすることができます。 – volcano

+0

あなたの答えをありがとうが、私は私の質問をはっきりと指摘しなかったと思うか、それをする方法を理解していない。どんな方法でも質問を編集します。 – Max