2013-10-27 2 views
1

저는 오랫동안 (말 그대로 주 같은)이 일에 매달 렸습니다. 코드에서 다른 모든 작업을 완료했습니다. 나는 또한 많은 연구를 해왔지만 솔루션 근처에서는 아무 것도 얻을 수 없습니다. 내가 여기에 오기 위해 일주일 만 기다렸던 유일한 이유는이 문제를 스스로 풀고 싶었 기 때문이다. 그러나 지금 나는 포기한다! 내가 인스턴스를 만들 때, 이제함수의 인수를 함수 내부의 다른 객체의 객체로 사용하는 방법은 무엇입니까?

class test: 
    def meth1(self, obj): 
    self.hello = {} 
    return self.hello.obj() 
    def meth2(self): 
     test.meth1(self, 'keys') 

및 방법은 다음과 같습니다 meth2 호출하려고 :

이제

, 나는 다음과 같은 코드가 있다고 가정

x = test() 
x.meth2() 

그것은 나에게 오류를 제공합니다 명백한 이유. 어떻게하면 원하는대로 할 수 있습니까? 함수에 인수를 전달하고 그 인수를 다른 객체의 객체로 사용합니까?

def meth1(self, obj): 
    self.hello = {} 
    return getattr(self.hello, obj)() 

getattr(a, b)이 (두 번째 경우에 b은 첫 번째 경우의 b 보유하는 문자열입니다) a.b 동일합니다 : 당신이 getattr()을 원하는처럼

답변

2

보인다. 이 경우 aself.hello이고 bobj입니다. 귀하의 발췌문에서 으로 전화하시는 것 같습니다. obj 속성을 직접 반환하는 것과 반대로 속성을 사용하십시오. 그 이유는 끝에 ()이있는 이유입니다.


>>> class test: 
...  def meth1(self, obj): 
...   self.hello = {} 
...   return getattr(self.hello, obj)() 
...  def meth2(self): 
...   return test.meth1(self, 'keys') 
... 
>>> x = test() 
>>> x.meth2() 
[] 
+0

OK! 내가 제대로 _get_ 할 수 없었기 때문에 나는 실제로 getattr을 잊어 버렸습니다 ...? 그럼, 그 코드로 무슨 일이 일어나는지 나에게 설명해 주시겠습니까? 내 말은,'self.hello.obj'를 말하는 것과 비슷하지만 어떤 차이가 있는지 알고 있습니다. –

+0

@AkshatTripathi 물론, 작은 설명을 추가했습니다. 아직도 이해가 안되는 것이 있으면 알려주세요. – arshajii

+0

하지만 그것이 무슨 차이가 있습니까? 당신이 작성한 코드는'getattr (self.hello, obj)()'는'self.hello.obj()'와 동일하지만 여전히 후자를 시도 할 때 예외가 발생합니다. –

관련 문제