2017-11-19 2 views
0

함수의 인수로 객체를 전달할 때 호출 할 마법 메서드가 있습니까?인수로 함수에서 객체를 전달하는 마법 방법은 무엇입니까?

class Test: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
    def __???__(self): 
     return (self.a, self.b) 

test = Test(0, 1) 

some_function(test) # I'd like to pass parameters (0, 1) here 
+6

아니, 없다. 그것은 매우 혼란 스러울 것이다. 당신은'__iter__'을 구현하고'some_function (* test)'를 호출 할 수 있습니다. – Ryan

+0

파이썬에는 마술이 없습니다. Ruby에서 마술을보고 싶을 수도 있습니다. –

+2

Python 코어 개발자 Raymond Hettinger의 [이 답변] (https://stackoverflow.com/a/8601389/4014959)도 참조하십시오. –

답변

2

아니요, 인수는 어떤 식 으로든 특별하게 취급되지 않습니다. 이것은 함수의 매개 변수 이름에 대한 또 다른 할당입니다.

하면, 별도의 인수로 ab 치료 Test순서을, 다음 인수를 분리하는 순서를 확장 *sequence 호출 구문을에 전달해야합니다. 당신은 그것에게 iterator type를 만들어 그것을 순서를 만들 수 있습니다

class Test: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
    def __iter__(self): 
     return iter((self.a, self.b)) 

test = Test(0, 1) 
some_function(*test) 

데모 :

>>> def some_function(a, b): 
...  print(f'a = {a!r}\nb = {b!r}') 
... 
>>> test = Test(0, 1) 
>>> some_function(*test) 
a = 0 
b = 1 
+0

[PEP 498 f-strings] (https://www.python.org/dev/peps/pep-0498/)의 좋은 예입니다. –

+0

나는 f-string이 값으로 평가되어야한다는 인상하에있다. 두 가지 질문은 some_function이 self.a의 값을 전달하는 것인가 아니면 실제로 포인터를 전달하고 나서 print 문을 찾은 것입니까? 값이 궁극적으로 f-string으로 전달되면 여기에서! r을 사용하면 어떤 이점이 있습니까? – Rookie

+1

@Rookie : 예,'f' 문자열은 결과가 보간되는 표현식을 지정합니다. 'str.format()'는 'a = {! r} \ nb = {! r}'형식입니다 (format (a, b)'). 'a'와'b'는'some_function()'함수의 * local variables *입니다. 그것이 당신의 이해를 돕는다면 당신은 그들에게 다른 이름을 줄 수 있습니다. –

관련 문제