2014-04-11 12 views
-1

파이썬에서 권장되는 방법인지 확실하지 않습니다. 나는 그러나 그렇게목록에서 파이썬 속성을 설정하지만 목록 외부에서 호출하십시오.

class MyClass: 
    def __init__(self): 
     self.attr1 = "first_value" 
     self.attr2 = "second_value" 
     ... 

같은 속성의 무리와 함께 클래스가,이 지루한, 난 루프에서이 작업을 수행 할 수 있도록하려면 :

self.attr_list = ["attr1", "attr2", "another_attr",...] 

def __init__(self, values_list): 
    self.attr_values = [some_func(i) for i in values_list] 

하지만 나중에 원하는 과 같이 이러한 값을 호출

foo = MyClass(values_list) 
... 

bar = foo.attr1 

myFunc(foo.another_attr, ..., some_other_parameters) 

그래서 질문, 나는 각 속성에 대한 행이 하드 코드입니다 지루한 첫 번째 방법을 피하지만, 여전히 않고도 속성 참조의 편의를 얻는 방법 알고/r 그것이 목록에있는 곳을 emember?

희망 사항입니다.

감사

P.S. 나는 파이썬 3을 사용하고있다

답변

0

나는이 질문을 이해할 수 없다. setattr을 찾고 계십니까? 이런 식으로 뭔가 :

def assign(self, attr_names, value_list): 
    for i in range(len(attr_names)): 
     setattr(self, attr_names[i], some_func(value_list[i])) 

당신은 그런 식으로 사용할 수 있습니다 :

foo.assign(["attr1", "attr2"], value_list)  
print(foo.attr1) 

나는 setattr를 사용하는 자체가 잘못이라고 생각하지 않습니다하지만 당신에 의해 다른 속성을 덮어 쓸 수 있기 때문에 대신 사전을 사용하여 I 조언 예를 들어 다음을 고려하십시오.

foo.assign(["assign"], [1]) 
foo.assign(["assign"], [1]) # <-- exception now 
+0

사전을 사용하면 기존 속성을 덮어 쓰지 않으시겠습니까? –

+0

감사합니다. 저는'setattr'과 사전을 모두 시험해 볼 수있었습니다. 현재이 값을'__init__'에 한 번만 설정하고 있으므로 덮어 쓰지 않을 것입니다. –

+0

@SamuelTan 내가 의미 한 것은 사전 속성, 즉'__init__'에'foo.my_dict = {}'를 유지하고 그 사전에 할당한다는 것입니다. 이렇게하면 실수로 덮어 쓰는 것을 방지 할 수 있습니다. – freakish