Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查看对对象调用了什么方法_Python - Fatal编程技术网

Python 查看对对象调用了什么方法

Python 查看对对象调用了什么方法,python,Python,假设我有以下几点: obj = Object() obj.meth(1, 2) 在对象内部,如何检测对其调用的方法及其参数?我在考虑一个神奇的方法,但我不知道如何获得被调用的方法名及其参数。我正在寻找类似于: class Object(object): def ????(self): print 'Method %s was called with args: %s' % (????, ','.join(???)) 基本上,我在以下场景中需要它:obj是另一个类的某种

假设我有以下几点:

obj = Object()
obj.meth(1, 2)
对象内部
,如何检测对其调用的方法及其参数?我在考虑一个神奇的方法,但我不知道如何获得被调用的方法名及其参数。我正在寻找类似于:

class Object(object):
    def ????(self):
        print 'Method %s was called with args: %s' % (????, ','.join(???))
基本上,我在以下场景中需要它:
obj
是另一个类的某种代理,对“另一个类”的所有方法调用都应该通过
obj
。因此,不是直接调用另一个类.meth(),而是调用了
obj.meth()
。由于
对象
是抽象的,它将作为不同类的代理,因此无法知道将对其调用什么方法


如果有其他更好的解决方案,请分享

您误解了方法访问的工作原理。可以在不调用的情况下查找方法:

method = someobj.methodname

if some_condition:
     method()
在这里,在满足条件之前,只引用方法,不调用方法。方法只是另一个对象,碰巧是可调用的

对于代理类,您不会捕获方法调用,而是捕获属性访问:


您误解了方法访问的工作原理。可以在不调用的情况下查找方法:

method = someobj.methodname

if some_condition:
     method()
在这里,在满足条件之前,只引用方法,不调用方法。方法只是另一个对象,碰巧是可调用的

对于代理类,您不会捕获方法调用,而是捕获属性访问:



所以基本上你想做调试器所做的事情,除了你可以在你的应用程序中操作它之外?@frostnational这不是一个完全重复的东西,请仔细阅读。@MxyL我已经更新了我的答案。@AndreiHorak这很简单similar@AndreiHorak:您询问是否检测任意方法访问,或者您正在询问检测对现有方法的调用。如果是前者的话,Frostnational的dupe链接就是正确的。如果是后者,你只是告诉我不是!所以基本上你想做调试器所做的事情,除了你可以在你的应用程序中操作它之外?@frostnational这不是一个完全重复的东西,请仔细阅读。@MxyL我已经更新了我的答案。@AndreiHorak这很简单similar@AndreiHorak:您询问是否检测任意方法访问,或者您正在询问检测对现有方法的调用。如果是前者的话,Frostnational的dupe链接就是正确的。如果是后者,你只是告诉我不是
meth
不应出现在
对象中,因为现在已经知道将在
对象
实例上调用哪些方法。(我没有投反对票)。@AndreiHorak:你的问题不清楚这一点;在您的帖子中,没有任何地方表明您希望它适用于任意属性。@AndreiHorak:而且永远不知道将调用哪些方法,只有哪些方法可用。:-)我已经编辑了我的问题,希望它能让事情变得更容易理解。调用方要求代理提供名为
meth
的方法。代理返回名为
meth
的方法,该方法属于
real\u obj
值。一旦调用者有了对方法的引用,就会直接调用它。
meth
不应该出现在
Object
中,因为现在已经知道将在
对象
实例上调用哪些方法。(我没有投反对票)。@AndreiHorak:你的问题不清楚这一点;在您的帖子中,没有任何地方表明您希望它适用于任意属性。@AndreiHorak:而且永远不知道将调用哪些方法,只有哪些方法可用。:-)我已经编辑了我的问题,希望它能让事情变得更容易理解。调用方要求代理提供名为
meth
的方法。代理返回名为
meth
的方法,该方法属于
real\u obj
值。一旦调用方有了对该方法的引用,就会直接调用它。