3 回答
TA贡献1842条经验 获得超21个赞
甲功能是在Python一个可调用对象,即,可以使用被称为呼叫操作员(尽管其它的目的可以通过实施模拟函数__call__)。例如:
>>> def a(): pass
>>> a
<function a at 0x107063aa0>
>>> type(a)
<type 'function'>
甲方法是一类特殊的功能,一个可被结合或绑定。
>>> class A:
... def a(self): pass
>>> A.a
<unbound method A.a>
>>> type(A.a)
<type 'instancemethod'>
>>> A().a
<bound method A.a of <__main__.A instance at 0x107070d88>>
>>> type(A().a)
<type 'instancemethod'>
当然,不能调用未绑定方法(至少在不将实例作为参数传递的情况下,不能直接调用):
>>> A.a()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method a() must be called with A instance as first argument (got nothing instead)
在Python中,大多数情况下,您不会注意到绑定方法,函数或可调用对象(即,实现的对象__call__)或类构造函数之间的区别。它们看起来都一样,只是命名约定不同。在引擎盖下,物体看起来可能有很大的不同。
这意味着可以将绑定方法用作函数,这是使Python如此强大的众多小功能之一
>>> b = A().a
>>> b()
这也意味着,即使len(...)和之间str(...)(后者是类型构造函数)之间存在根本的区别,在深入研究之前,您不会注意到该区别:
>>> len
<built-in function len>
>>> str
<type 'str'>
TA贡献1858条经验 获得超8个赞
在下面的类定义中:
class MyClass:
"""A simple example class"""
def f(self):
return 'hello world'
类别:MyClass
函数:f()
方法:无(实际上不适用)
让我们创建上述类的实例。我们将通过分配class object, i.e. MyClass()给var x
x = MyClass()
这里,
功能:无
方法:xf()
并且不要忘记,当我们将x分配给MyClass()时,它function object MyClass.f曾经被用来(内部)定义method object x.f
添加回答
举报