Trong Python, function là đối tượng callable (có thể gọi bằng toán tử ()). Các đối tượng khác cũng có thể mô phỏng function bằng cách triển khai __call__.
Function
def a(): pass
print(a) #
print(type(a)) #
Method
Method là function đặc biệt: bound (gắn với instance) hoặc unbound (chưa gắn).
class C:
def c(self): pass
print(C.c) # (unbound - Python 3)
print(type(C.c)) #
print(C().c) # >
print(type(C().c)) #
Điểm chung (First-class citizens)
- Function, bound method, callable object, class constructor - đều là callable.
- Có thể gán cho biến, truyền làm đối số, trả về từ hàm khác, lưu trong list/dict.
- Python không phân biệt mạnh giữa chúng ở mức sử dụng.
# Bound method dùng như function
class A:
def a(self): print("A.a")
d = A().a # bound method
d() # Gọi như function: "A.a"
# len vs str
print(len) #
print(str) # (constructor nhưng cũng callable)
Kết luận
Function là khái niệm cơ bản hơn. Method là function được bind với instance. Callable objects (có __call__) mờ ranh giới hơn nữa. Python coi tất cả là "callable" - thống nhất mô hình.