2016-11-03 5 views
0

Das ist nicht mein Code, aber ich habe ein ähnliches Problem:Wie viele Standardwerte für mehrere Klassen, Funktionen in Python angeben?

https://gist.github.com/songrotek/0c64d10cab5298c63cd0fc004a94ba1f

Es gibt viele Parameter I (in der die meisten semantischen Weise möglich) und verwenden Sie dann zu konstruieren, an einem zentralen Ort bearbeiten und ändern wollen Klassen, führe das Hauptprogramm usw. aus. Weil ich nicht alles in eine Datei schreiben will (es ist zu groß, brauche ich Module und verschiedene Namespaces) und deklariere globale Variablen. Den Code zum Einstellen einiger Parameter bearbeiten zu müssen scheint keine gute Lösung zu sein.

Die Verwendung solcher Konstruktoren für die Verwendung von Wörterbüchern für Init scheint nicht transparent genug zu sein.

Was sind mögliche Lösungen für dieses Problem? Es ist immer noch Code meist von mir verwendet und eher klein, so sollte es ein guter Kompromiss zwischen leicht/passend für die Größe und dennoch einfach zu bedienen und komfortabel sein.

+0

Sie ein Wörterbuch passieren können in '** kwargs'. Wenn Ihr Wörterbuch beispielsweise "d" heißt, können Sie "** d" übergeben. Meinst Du das? – cdarke

+0

Ich bin mir nicht sicher, ob ich Ihr Anliegen richtig verstehe, aber es geht in die Richtung dessen, was hier besprochen wurde: [http://stackoverflow.com/questions/6198372/most-pythonic-way-to-provide-global-configuration- variables-in-config-py] –

Antwort

0

Eine gängige Methode, dies zu handhaben, ist eine Konfigurationsdatei, die von ConfigParser gelesen wird. Hier

ein Beispiel:

# configuration.ini 
[Example1] 

constant1: 1 
constant2: 2 

[Example2] 

c1: 'one' 
c2: 'two' 

# test.py 
from ConfigParser import ConfigParser 

conf = ConfigParser() 
conf.read('configuration.ini') 

def configure_instance(instance): 
    for i in conf.items(type(instance).__name__): 
     setattr(instance, i[0], i[1]) 

class Example1(object): 
    def __init__(self): 
     configure_instance(self) 

class Example2(object): 
    def __init__(self): 
     configure_instance(self) 


e1 = Example1() 
e2 = Example2() 
print vars(e1) 
print vars(e2) 

# {'constant1': '1', 'constant2': '2'} 
# {'c2': "'two'", 'c1': "'one'"} 
+0

Der Nachteil ist, dass beim Ini-File-Ansatz alle Variablen Strings sind. Sie könnten dies zu YAML (http://pyyaml.org/wiki/PyYAML) wechseln, das die Variablentypen automatisch erkennt. – hvwaldow

Verwandte Themen