Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 如何通过方法包装器获取绑定到对象的底层函数的id?_Python_Python 3.x - Fatal编程技术网

Python 如何通过方法包装器获取绑定到对象的底层函数的id?

Python 如何通过方法包装器获取绑定到对象的底层函数的id?,python,python-3.x,Python,Python 3.x,考虑以下情况: >>> "a".capitalize.__call__ <method-wrapper '__call__' of builtin_function_or_method object at 0x1022e70d8> >>> "a".capitalize.__call__.__call__ <method-wrapper '__call__' of method-wrapper object at 0x1022e2b70>

考虑以下情况:

>>> "a".capitalize.__call__
<method-wrapper '__call__' of builtin_function_or_method object at 0x1022e70d8>
>>> "a".capitalize.__call__.__call__
<method-wrapper '__call__' of method-wrapper object at 0x1022e2b70>
>>> id("a".capitalize.__call__)
4331547448
>>> id("a".capitalize.__call__.__call__)
4331547504
>>> id("a".capitalize.__call__) == id("a".capitalize.__call__.__call__)
False
>>“a”。大写。\u调用__
>>>“a”。大写。呼叫。呼叫__
>>>id(“a”。大写。\调用\uuuuuuu)
4331547448
>>>id(“a”。大写。\调用。\调用)
4331547504
>>>id(“a”.capitalize.\uuuuuu call\uuuuuuu)==id(“a”.capitalize.\uuuuuuuuu call\uuuuuuuu)
假的
如何在运行时确定在这两种情况下,
\uuuuuu调用\uuuuu
引用相同的基本符号

编辑:
首先,期望
\uuuuu call\uuuuu
存在这样的东西可能是不合理的,因为
\uuuuuu call\uuuuu
可能没有未绑定到任何对象的基本符号-在这种情况下,除了保留一个特殊名称列表之外,检测这种情况的最佳方法是什么(这样的列表怎么能权威地建立?

不适用于
内置函数或
方法,因为它们没有
\uuu函数

如果您只使用类,则可以比较
\uuu func\uu

>>> class Foo:
...     def bar(self):
...         pass
... 
>>> 
>>> a = Foo()
>>> b = Foo()
>>> a.bar.__func__
<function Foo.bar at 0x7f6f103e5ae8>
>>> a.bar.__func__ is b.bar.__func__
True

即使对于bltns,这也应该适用:

>>> type("").capitalize is type("a").capitalize
True
对于层次结构:

>>> class A:
...     def foo(self):...
... 
>>> class B(A):...
... 
>>> a = A()
>>> b = B()
>>> type(a).foo is type(b).foo
True

它们是不同的对象,因此具有不同的
id
,您的最终目标是什么?以编程方式确定所有的.uuuu调用(仅作为示例)方法都是绑定到不同对象的相同函数。这在genral情况下也不起作用,因为不同的对象包装器具有不同的类型:
type(“.capitalize”)我的意思是
类型(“”)。大写是类型(“a”)。大写是类型(“a”)。大写是id(“.capitalize)==id(“.capitalize”)
,但我想知道是否有什么东西可以无缝地适用于所有方法。你是说我的
类型(“”)。capitalize是类型(“a”).capitalize
并不能无缝地适用于所有方法?我的意思是类型(object)。方法是类型(otherobject)。方法适用于object和otherobject的所有情况-请参阅我原始问题中的编辑。
>>> class A:
...     def foo(self):...
... 
>>> class B(A):...
... 
>>> a = A()
>>> b = B()
>>> type(a).foo is type(b).foo
True