我想要創建一個函數來檢測給定實例是否存在某個方法,可以傳入哪些參數,然後使用適當的參數調用該方法。我是新手,我不知道該怎麼做:(如何獲取某個函數的信息並將其調用
2
A
回答
3
嘗試hasattr
>>> help(hasattr)
Help on built-in function hasattr in module __builtin__:
hasattr(...)
hasattr(object, name) -> bool
Return whether the object has an attribute with the given name.
(This is done by calling getattr(object, name) and catching exceptions.)
爲了瞭解更高級的自省inspect
模塊。
但首先,請告訴我們你爲什麼需要這個。有一個99%的機會,更好的方式中存在...
+3
+1最後一句 – Juergen 2009-07-31 13:55:07
1
0
您是否嘗試將參數值與具有未知簽名的函數對齊?
如何匹配參數值和參數變量?猜測?
你必須使用某種名稱匹配。
例如這樣的事情。
someObject.someMethod(thisParam=aValue, thatParam=anotherValue)
哦。等待。這已經是Python的頭等部分了。
但是如果該方法不存在(爲了不可知的原因)。
try:
someObject.someMethod(thisParam=aValue, thatParam=anotherValue)
except AttributeError:
method doesn't exist.
0
class Test(object):
def say_hello(name,msg = "Hello"):
return name +' '+msg
def foo(obj,method_name):
import inspect
# dir gives info about attributes of an object
if method_name in dir(obj):
attr_info = eval('inspect.getargspec(obj.%s)'%method_name)
# here you can implement logic to call the method
# using attribute information
return 'Done'
else:
return 'Method: %s not found for %s'%(method_name,obj.__str__)
if __name__=='__main__':
o1 = Test()
print(foo(o1,'say_hello'))
print(foo(o1,'say_bye'))
我覺得inspect
模塊將是非常多的幫助你。 以上代碼使用的主要功能是dir,eval,inspect.getargspec
。你可以在python文檔中獲得相關的幫助。
+0
使用getattr(obj,method_name)比使用eval要乾淨得多。 – Brian 2009-07-31 15:50:07
相關問題
- 1. 如何獲取有關C函數的調用者的信息?
- 2. 如何獲取Facebook用戶的信息並將其插入數據庫?
- 3. 獲取某個函數的輸入並在另一個函數中調用它
- 4. 如何使用JQuery獲取有關某個標籤的信息?
- 5. 從MySql Query獲取信息並將其放入PHP數組中
- 6. 如何從函數中獲取調試信息?
- 7. 如何獲取函數的結果並將其應用於R中的函數?
- 8. 如何獲得一個信號來調用具有某些參數的函數?
- 9. 獲取PHP函數信息使用jquery
- 10. 替代erlang:get_stacktrace/0獲取函數調用者的信息?
- 11. 獲取多次調用函數時添加的信息
- 12. 在python中獲取函數調用者的信息
- 13. 獲取有關函數調用的詳細信息
- 14. 讀取.TXT信息,並將其加載到一個數組
- 15. 如何獲取有關Oracle中某個表的所有信息?
- 16. 如何獲取某個列表元素的詳細信息?
- 17. 獲取傳入Javascript函數的信息
- 18. 獲取信息的PHP函數
- 19. 使用DriveInfo獲取USB信息,並以某種方式輸出信息
- 20. 從json獲取信息並在函數中使用它
- 21. phpinfo()獲取其信息?
- 22. 調用一個網站並獲取JSON信息返回
- 23. 從文件中獲取信息並將其組織爲常量
- 24. 從sql中獲取信息並將其放在表單中
- 25. 獲取會話信息並將其放置到django表格中
- 26. 從表單獲取信息並將其粘貼到jsp
- 27. 從ListBox中獲取信息並將其放入標籤
- 28. 如何獲得信息的計數,直到某個字符C#
- 29. 如何從url中獲取信息並在php函數中使用它?
- 30. 如何獲取data-id並將其傳遞給函數?
您是否知道檢查存在時的方法名稱? – 2009-07-31 13:50:18