2012-11-09 3 views
1

몇 가지 인수 (예 : 20)에 인수 집합을 편리하게 전달하려고합니다.인스턴스 '__dict__의 키워드 인수 풀기의 함정은 무엇입니까?

def function(a, b): 
    return a + b 


class summation: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 


s = summation(1,2) 

function(**s.__dict__) 

의 I는 그것을 할 노력하고있어 이유는 내가 4 수신 기능의 무리가 있습니다 :

는 (물론 정말 같은 방법으로 추가 된 일을 고려하지 않음) 다음 MWE을 고려 동일한 논증과 나는 하나의 기능에서 다른 기능으로 넘어가 파이프 라인에서 처리해야합니다.

s은 항상 관련 필드 만 포함한다는 것을 의미하므로 인수를 전달하는 좋은 방법입니까?

+0

왜 안'바르 (들)'? – georg

+0

@ thg435는 그것에 대해 알지 못했습니다. 그것은 '객체 .__ dict__'의 '해킹과 같은'버전이 아닌 것을 의미합니까? –

+0

많은 함수에 변수를 전달하는 경우 변수 모듈 수준을 설정할 수 있습니다. – ninMonkey

답변

3

그것은 객체 사전은 어떤 기술자 또는 기타 "마법"을 포함하지 않기 때문에 obj.__dict__를 사용하는 일반적으로 좋은 생각이 그 개체에 존재하는 속성입니다. 또한 관습에 따라 접두사 _ 뒤에 숨겨진 숨겨진 특성도 포함됩니다. 따라서 obj.__dict__ 기술은 실제로 완전히 기본 유형에서만 작동하며 getter/setter 등을 제어 할 수 있도록 속성을 속성으로 업데이트하기로 결정한 경우 미래의 증거는 아닙니다. vars(obj)에는 이와 동일한 문제가 있습니다.

class Rectangle(object): 
    x = 0 
    y = 0 
    _width = 0 
    height = 0 

    @property 
    def width(self): 
     return self._width 

    @width.setter 
    def width(self, value): 
     if value < 0: 
      value = -value 
      self.x -= value 
     self._width = value 

>>> r = Rectangle() 
>>> r.__dict__ 
{} 
>>> # this is because everything is class-level properties so far 
>>> r.width = 50 
>>> r.__dict__ 
{'_width': 50} 
+0

죄송합니다, 내 대답의 맥락에서 귀하의 질문을 이해하지 않습니다. 귀하의 질문은 함정을 알고 싶다는 것을 의미합니다. –

2

Namedtuple 귀하를 위해이 작업을 수행합니다.

는 여기가 talk from PyCon US 2011[11:35 - 26:00]

from collections import namedtuple 
Add = namedtuple("Add", "a b c d") 

one = Add(1, 2, 3, 4) 

def addme(a, b, c, d): 
    print a + b 
    print c + d 

>>> addme(*one) 
... 3 
... 7 
+0

전체 이름 ('nt.a')이 아닌'a'로 필드에 액세스하고 싶지는 않습니다. –

+0

@ Constantius '* unpack' 명명 된 튜플. 설명을 편집 할 것입니다. – kreativitea

0
for attribute, attribute_value in obj.__dict__.items(): # or obj.__dict__.iteritems() 
    print attribute, attribute_value 
+1

일반적으로 코드에서 질문을 처리하는 방법에 대한 설명을 포함시켜야합니다. 이 특별한 경우에, 질문이 무엇인지를 고려하여, 설명이없는 몇 줄의 코드가 어떻게 대답이 될 수 있는지를 보지 못했습니다. –

관련 문제