术语“绑定”在类方法中意味着什么

时间:2013-11-19 06:21:00

标签: python python-2.7 python-3.x

当我们实例化一个类时,这些方法会受到约束。为每个创建的实例的特定实例。这个词怎么绑定'在这里意味着我不认为为每个实例创建方法对象的副本

我已经读过与'绑定相关的开销。该类的每个实例的方法。这是什么样的开销

2 个答案:

答案 0 :(得分:0)

这意味着它绑定到一个实例。即。该实例作为self参数

传递
class Foo(object):
    def bar(self):
        print "The instance is:", self

foo = Foo()

以下具有相同的效果

foo.bar()        # call bound method. instance gets passed in automatically
Foo.bar(foo)     # unbound method. first parameter should be an instance

答案 1 :(得分:0)

简单地说,未绑​​定的方法要求您传递self的对象。

绑定方法自动将类实例作为self传递。

另请参阅this answer并查看at descriptors以便更好地了解方法。

在代码中:

# class definition
>>> class Foo:
>>>    def bar(self):
>>>        print 'self:', self

# class instance -> bound method
>>> a = Foo()
>>> print a, a.bar
<__main__.Foo instance at 0x107bcda70> <bound method Foo.bar of <__main__.Foo instance at 0x107bcda70>>

>>> a.bar()
self: <__main__.Foo instance at 0x107bcda70>


# class -> unbound method
>>> print Foo, Foo.bar
__main__.Foo <unbound method Foo.bar>
>>> Foo.bar()
TypeError: unbound method bar() must be called with Foo instance as first argument (got nothing instead)


# manually binding a method
>>> b = Foo.bar.__get__(a, Foo)
>>> print b
<bound method Foo.bar of <__main__.Foo instance at 0x107bcda70>>

>>> b()
self: <__main__.Foo instance at 0x107bcda70>