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
添加回答
舉報