2013-10-27 17 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() 

它給了我一個錯誤明顯的原因。我怎樣才能讓它做我想做的事 - 將一個參數傳遞給一個函數,並將該參數用作另一個對象的對象?

回答

2

看起來像你想getattr()

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

getattr(a, b)相當於a.b(其中b在第二種情況是,第一種情況的b包含字符串)。在這種情況下,aself.hellobobj。從你的片段看來,你想要請致電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!我實際上已經忘了getattr,因爲我從來沒有能夠正確地調整它...?那麼,你介意給我解釋一下這段代碼是怎麼回事? 我的意思是,我知道這和說'self.hello.obj'類似,但它有什麼不同? –

+0

@AkshatTripathi當然,我添加了一個小解釋。讓我知道你是否還有什麼不明白的地方。 – arshajii

+0

但它有什麼不同?你寫的代碼是:'getattr(self.hello,obj)()'等價於'self.hello.obj()',當我嘗試後者時,會引發異常,爲什麼呢? –

相關問題