2016-11-03 3 views
0

이 내 코드가 아닙니다하지만 비슷한 문제가 있습니다파이썬에서 여러 클래스, 함수에 대해 많은 기본값을 지정하는 방법은 무엇입니까?

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

많은 내가 편집 할 매개 변수와 다음 (가장 의미 론적 방법으로 가능) 하나 개의 중앙 위치에서 변화와 작성하기 위해서 사용하는이 있습니다 클래스, 주 프로그램 등을 실행하십시오. 모든 것을 하나의 파일에 넣고 싶지 않기 때문에 (너무 큽니다. 모듈과 다른 네임 스페이스가 필요합니다) 전역 변수를 선언하십시오. 일부 매개 변수를 설정하기위한 코드를 편집하면 좋은 해결책이 아닌 것 같습니다.

class Example: 
    def __init__(self, *initial_data, **kwargs): 
     for dictionary in initial_data: 
      for key in dictionary: 
       setattr(self, key, dictionary[key]) 
     for key in kwargs: 
      setattr(self, key, kwargs[key]) 

init 용 사전을 사용할 수 있도록 이와 같은 생성자를 사용하면 충분히 투명하지 않은 것처럼 보입니다.

이 문제점의 가능한 해결책은 무엇입니까? 그것은 여전히 ​​나에 의해 주로 사용되는 코드이고 다소 작기 때문에 가볍거나 크기에 알맞고 사용하기 쉽고 편안한 사이에 좋은 절충안이되어야합니다.

+0

: 여기

은 예입니다. 예를 들어, 사전이'd'라고하면'** d '를 전달할 수 있습니다. 이게 네가 말하는거야? – cdarke

+0

내가 귀하의 우려를 정확하게 이해하고 있는지 여부는 확실하지 않지만 여기에서 논의 된 내용의 방향으로 이동합니까? [http://stackoverflow.com/questions/6198372/most-pythonic-way-to-provide-global-configuration- variables-in-config-py] –

답변

0

이 문제를 처리하는 일반적인 방법은 ConfigParser에 의해 읽혀지는 구성 파일입니다. 당신은 kwargs` **`로 사전을 전달할 수 있습니다

# 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

ini-file 방식을 사용하면 모든 변수가 문자열입니다. 변수 유형을 자동 감지하는 YAML (http://pyyaml.org/wiki/PyYAML)으로 전환 할 수 있습니다. – hvwaldow

관련 문제