2016-10-10 6 views
1

에 같은 클래스의 객체를 퍼팅 나는이 개체가 :다른 키와 사전 파이썬

class Object(object): 

    def __init__(self, name, *parameters): 
     self.name = name 
     self.parameters = parameters 

    def name(self): 
     return self.name 

    def parameters(self): 
     return self.parameters 

class Parameter(object): 

    def __init__(self, name, value): 
     self.name = name 
     self.value = value 

내 목표는 사전에 1 개 개체의 모든 매개 변수를 얻을 것입니다,하지만 이렇게 끝낼 필요 :

{ParameterOne: "ValueOne", ParameterTwo: "ValueTwo"} 

나는 다른 이름을 매개 변수를 제공 할 수 있어야하기 때문에,이처럼 수행 할 수 없습니다

class Parameter(object): 

    def __init__(self, value): 
     self.ParameterOne = value 

I을 분명히 작동하지 않았던이 같은 시도 :

data = {} 
    for parameter in object.parameters: 
     data.update(vars(parameter)) 

이것을 달성 할 방법이 있습니까?

+0

'__dict__'을 시도 할 수도 있습니다 생각

data = {parameter: parameter.name for parameter in object.parameters} 

찾고 있습니다. 'object .__ dict__'가 그렇게해야합니다. –

+0

그러면 { 'name': 'CreatedObjectTwo', 'parameters': (<0x7f248d846150>에서 , )} – Hatox

+0

사과를 반환합니다. 당신의 예제에서 나는'self.ParameterOne' 에서처럼 이름을 붙일 수 있기를 원한다고 생각했습니다. 실제로 달성하고자하는 것은 무엇입니까? –

답변

0
data = {parameter: ''.join(['Value ', str(index)]) 
     for index, parameter in enumerate(object.parameters)} 

당신은 숫자에 대한 영어 단어를 얻고 싶은 경우에 이것은 당신을 당신에게 {parameter0: 'Value 0', ...}을 줄 것이다는, 그것을 위해 자신의 기능을 롤 또는 inflect 같은 외부 패키지를 사용하는 중이 것이다.

단지 관찰이지만, 대부분의 사전은 객체에 문자열 매핑을 사용하고 다른 방법으로는 매핑하지 않습니다. 이런 식으로하는 이유가 있습니까?

편집 :

질문을 다시 읽기, 당신은 당신이 개체에 대신

data = {parameter.name: parameter.value for parameter in object.parameters}