2017-06-27 2 views
-3

Ich habe einige Variablen und ein Wörterbuch wie folgt.Erstellen Sie eine Liste von Objekten als Generator aus einem Wörterbuch

# Shared data 
env = 'qa' 
appr = 'staff' 
name = 'Joe' 

{ 
    "E01": { 
     "Work": "raw/091_c.txt", 
     "Estimate": "raw/092_c.txt", 
     "Unrelated": "raw/094_c.txt", 
     "Related": "raw/095_c.txt", 
     "Digital": "raw/093_c.txt", 
     "Status": "raw/117_c.txt" 
    }, 
    "S01": { 
     "Work": "raw/158_c.txt", 
     "Estimate": "raw/159_c.txt", 
     "Unrelated": "raw/161_c.txt", 
     "Related": "raw/162_c.txt", 
     "Digital": "raw/160_c.txt", 
     "Status": "raw/172_c.txt" 
    }, 
    "S02": { 
     "Work": "raw/211_c.txt", 
     "Estimate": "raw/212_c.txt", 
     "Unrelated": "raw/214_c.txt", 
     "Related": "raw/215_c.txt", 
     "Digital": "raw/213_c.txt", 
     "Status": "raw/225_c.txt" 
    } 
} 

Ich mag eine Liste von 3 „Arbeit“ Objekten erstellen, 3 „Schätzung“ Objekte usw., in der gleichen Reihenfolge und einen Generator verwenden zu erzeugen und über sie in einer anderen Klasse zu wiederholen.

Jedes Objekt muss mit den gemeinsam genutzten Daten - env, app und name - initialisiert werden. Und jedes Objekt muss das oberste Wörterbuch Blatt "E01", "S01" usw. und den Pfadwert "rohe/091_c.txt" als ihre Eigenschaften haben.

So als Beispiel:

Class Name: "Work" 
Class Properties: 
        env = 'qa' 
        appr = 'staff' 
        name = 'Joe' 
        est = 'E01' 
        path = 'raw/091_c.txt' 

Class Name: "Estimate" 
Class Properties: 
        env = 'qa' 
        appr = 'staff' 
        name = 'Joe' 
        est = 'E01' 
        path = 'raw/092_c.txt' 

so weiter und so fort. Ein wichtiger Punkt ist, dass alle diese Klassen in meinem Projekt in einer anderen Datei/einem anderen Modul deklariert sind.

+3

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [zum Thema] (http://stackoverflow.com/help/on-topic) und [how to ask] (http://stackoverflow.com/help/how-to-ask) gilt hier. StackOverflow ist kein Design-, Codierungs-, Recherche- oder Lernprogramm. – Prune

Antwort

0

Leute. Ich konnte meine eigene Frage beantworten. Bitte schön. Irgendwelche besseren Lösungen sind definitiv willkommen.

import importlib 

# Shared data 
test_params = { 
    'env': 'qa', 
    'appr': 'staff', 
    'lname': 'Smith', 
    'fname': 'Peter' 
} 

test_est_dict = { 
    "E01": { 
     "Work": "raw/091_c.txt", 
     "Estimate": "raw/092_c.txt", 
     "Unrelated": "raw/094_c.txt", 
     "Related": "raw/095_c.txt", 
     "Digital": "raw/093_c.txt", 
     "Status": "raw/117_c.txt" 
    }, 
    "S01": { 
     "Work": "raw/158_c.txt", 
     "Estimate": "raw/159_c.txt", 
     "Unrelated": "raw/161_c.txt", 
     "Related": "raw/162_c.txt", 
     "Digital": "raw/160_c.txt", 
     "Status": "raw/172_c.txt" 
    }, 
    "S02": { 
     "Work": "raw/211_c.txt", 
     "Estimate": "raw/212_c.txt", 
     "Unrelated": "raw/214_c.txt", 
     "Related": "raw/215_c.txt", 
     "Digital": "raw/213_c.txt", 
     "Status": "raw/225_c.txt" 
    } 
} 


class NoEstimateDictError(Exception): 
    def __str__(self): 
     return ('The estimate_dict property has not been assigned.') 


class WebServiceEngine(object): 
    """docstring for WebServiceEngine""" 

    def __init__(self, **params): 
     self.params = params 
     self._estimate_dict = None 

    @property 
    def estimate_dict(self): 
     return self._estimate_dict 

    @estimate_dict.setter 
    def estimate_dict(self, est_dict): 
     self._estimate_dict = est_dict 

    @property 
    def generate(self): 
     if self._estimate_dict is None: 
      raise NoEstimateDictError 
     for est, files in self.estimate_dict.items(): 
      for classname, path in files.items(): 
       my_module = importlib.import_module('estimatefiles') 
       yield getattr(my_module, classname).from_kwargs(est=est, path=path, **self.params) 


if __name__ == '__main__': 
    wsengine = WebServiceEngine(**test_params) 
    wsengine.estimate_dict = test_est_dict 
    for obj in wsengine.generate: 
     print(str(obj)) 
Verwandte Themen