当我们实例化一个类时,这些方法会受到约束。为每个创建的实例的特定实例。这个词怎么绑定'在这里意味着我不认为为每个实例创建方法对象的副本
我已经读过与'绑定相关的开销。该类的每个实例的方法。这是什么样的开销
答案 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>