相关疑难解决方法(0)

Python方法包装器类型?

Python 3中的方法包装器类型是什么?如果我这样定义一个类:

class Foo(object):
    def __init__(self, val):
        self.val = val
    def __eq__(self, other):
        return self.val == other.val
Run Code Online (Sandbox Code Playgroud)

然后做:

Foo(42).__eq__
Run Code Online (Sandbox Code Playgroud)

我明白了:

<bound method Foo.__eq__ of <__main__.Foo object at 0x10121d0>>
Run Code Online (Sandbox Code Playgroud)

但如果我这样做(在Python 3中):

Foo(42).__ne__
Run Code Online (Sandbox Code Playgroud)

我明白了:

<method-wrapper '__ne__' of Foo object at 0x1073e50>
Run Code Online (Sandbox Code Playgroud)

什么是"方法包装"类型?

编辑:抱歉更准确:class method-wrapper是类型__ne__,就像我做的那样:

>>> type(Foo(42).__ne__)
<class 'method-wrapper'>
Run Code Online (Sandbox Code Playgroud)

而类型__eq__是:

>>> type(Foo(42).__eq__)
<class 'method'>
Run Code Online (Sandbox Code Playgroud)

此外,method-wrapper似乎是类上任何未定义的魔术方法的类型(因此__le__,如果没有明确定义__repr__,则__str__等也将具有此类型).

我感兴趣的是method-wrapperPython 如何使用该类.类的方法的所有"默认实现"都只是这种类型的实例吗?

types python-3.x

32
推荐指数
2
解决办法
2万
查看次数

什么是wrapper_descriptor,为什么Foo .__ init __()在这种情况下是一个?

import inspect

class Foo(object):
    pass

if __name__ == '__main__':
    print type(Foo.__init__)
    print inspect.getsourcelines(Foo.__init__)
Run Code Online (Sandbox Code Playgroud)

输出:

<type 'wrapper_descriptor'>
Traceback (most recent call last):
  *snip*
  File "/usr/lib/python2.7/inspect.py", line 420, in getfile
    'function, traceback, frame, or code object'.format(object))
TypeError: <slot wrapper '__init__' of 'object' objects> is not a module, class, method, function, traceback, frame, or code object
Run Code Online (Sandbox Code Playgroud)

谷歌搜索几乎没有提供有关什么,确切地说,wrapper_descriptor是什么,以及为什么空类有一个__init__方法不是一个方法,而是一个wrapper_descriptor.

到底发生了什么?没有__init__方法的所有类都有这些wrapper_descriptor之一吗?为什么__init__课堂上有一个词典呢?

python initialization

13
推荐指数
1
解决办法
2850
查看次数

方法包装器和槽包装器有什么区别?

1)True.__init__给出

`<method-wrapper '__init__' of bool object at 0x9efaa0>`
Run Code Online (Sandbox Code Playgroud)

2)int.__init__给出

`<slot wrapper '__init__' of 'object' objects>`
Run Code Online (Sandbox Code Playgroud)

有什么不同?

python methods wrapper slot

5
推荐指数
0
解决办法
289
查看次数

标签 统计

python ×2

initialization ×1

methods ×1

python-3.x ×1

slot ×1

types ×1

wrapper ×1