Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đâu cơ bản hơn: Python functions hay Python object-methods?

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.