Python phương thức ràng buộc là gì

Ý tưởng về định nghĩa phương thức hoặc hàm có lẽ là bất khả tri về ngôn ngữ và miền, tôi. e. , nhiều hơn một cách hợp lý để viết mã có thể sử dụng lại và một cách thông minh để triển khai DRY (Không lặp lại chính mình)

Định nghĩa phương thức trong Python dễ dàng như trong bất kỳ ngôn ngữ nào khác. Khối chức năng bắt đầu bằng từ khóa def, theo sau là tên chức năng và dấu ngoặc đơn

>>>hello_world()
"Hello World"

Vậy, làm thế nào để một phương thức hoạt động trong Python? . Hãy bắt đầu với một ví dụ quen thuộc

Ở đây, chúng ta có một lớp gọi là Animal với hai phương thức __init__ và animal_name, trong đó cái trước là a và cái sau là một khai báo phương thức cá thể Pythonic đơn giản. Có thể thấy rằng chúng tôi đã chuyển từ khóa 'self' trong cả hai phương pháp này. Điều đó có nghĩa là gì?

>>> Animal.animal_name
<unbound method Animal.animal_name>
>>>Animal.animal_name()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Animal.animal_name()
TypeError: unbound method animal_name() must be called with Animal instance as first argument (got nothing instead)

Từ khóa 'bản thân' chỉ là một quy ước đặt tên (cũng có thể sử dụng các từ khác). Bằng cách cung cấp 'self' làm đối số đầu tiên, chúng tôi chỉ định rằng các phương thức trong lớp Animal được liên kết với thể hiện của lớp, i. e, đối số đầu tiên được truyền chính nó là thể hiện của một lớp. Ví dụ dưới đây sẽ làm cho nó rõ ràng hơn

>>>animal = Animal('dog')
>>>animal.animal_name
<bound method Animal.animal_name of <__main__.Animal instance at 0x0216F9E0>>
>>>animal.animal_name()
'This is a dog'

Trong trường hợp này, chúng tôi tạo một thể hiện của lớp Animal được truyền làm đối số đầu tiên cho phương thức 'animal_name' hay nói chính xác hơn là phương thức Bound giống như thực hiện

>>>Animal.animal_name(Animal('cat'))
'This is a cat'

Các phương thức ràng buộc và không ràng buộc

Nói một cách đơn giản, một phương thức ràng buộc là phương thức phụ thuộc vào thể hiện của lớp làm đối số đầu tiên. Đó là lý do tại sao chúng được gọi là các phương thức thể hiện và trong ví dụ của chúng ta, animal_name là một phương thức thể hiện. Phương pháp tĩnh là ví dụ về phương pháp không liên kết. Nói về ví dụ trước của chúng tôi, chúng tôi có thể tìm thấy một sự tương tự, bất kỳ tên động vật nào trước tiên được liên kết với Động vật trước và sau đó được cho là hiển thị các đặc điểm của nó

phương pháp tĩnh

Nói một cách đơn giản hơn, các phương thức tĩnh là những phương thức không bị ràng buộc với thể hiện của lớp và chỉ xử lý các đối số mà nó nhận. Để khai báo một phương thức tĩnh, chúng ta chỉ cần thêm trình trang trí '@staticmethod' trên định nghĩa phương thức như trong ví dụ tiếp theo

Chúng ta có thể thấy trong ví dụ rằng chúng ta đã không thêm từ khóa 'self' vào thông báo, điều này cho thấy rằng nó không liên quan đến lớp hoặc thể hiện của nó. Vì dù sao thì nó cũng không liên quan đến lớp, nên không bắt buộc phải gọi các phương thức tĩnh với thể hiện của lớp. Ví dụ sau đây sẽ cho một ý tưởng rõ ràng

>>>Animal.message()
"Love animals!"
>>>a = Animal('dog')
"Love animals!"
>>>Animal.message
<function __main__.message>

Do đó, chúng ta thấy rằng các phương thức tĩnh không bị ràng buộc với lớp. Ngoài ra, tương tự với ví dụ này là thông điệp (“Yêu động vật”) thuộc loại chung chung hơn và không liên quan đến lớp, vì vậy các phương thức tĩnh là những phương thức không liên quan đến lớp. Bằng cách sử dụng các phương thức tĩnh, về cơ bản, chúng ta đang cố gắng chứng minh rằng phương thức này phụ thuộc vào các đối số và không chạm vào thể hiện (i. e. 'bản thân'). Chúng ta có thể thấy việc triển khai trong mô-đun của kho lưu trữ CPython

phương pháp phân loại

Giống như các phương thức tĩnh, các phương thức lớp cũng độc lập với thể hiện của lớp nhưng phụ thuộc vào chính lớp đó. e. , ràng buộc với lớp. Vì vậy, khá rõ ràng là nó lấy lớp làm tham số đầu tiên. Các phương thức lớp có thể được tạo bằng trình trang trí '@classmethod' như được mô tả trong ví dụ tiếp theo

Trong ví dụ trên, chúng tôi chuyển 'cls' làm tham chiếu lớp. Hãy xem cách nó hoạt động

>>>Animal.animal
'dog'
>>>Animal.change_animal
<bound method classobj.change_nimal of <class __main__.Animal at 0x7f63aefca9a8>>
>>>Animal.change_animal('bird')
>>>Animal.animal
'bird'

Ví dụ này làm rõ rằng các phương thức lớp được liên kết với chính lớp đó và do đó, đủ mạnh để thay đổi các thuộc tính của lớp; . Ngoài ra, điều đáng chú ý là giống như các phương thức tĩnh, chúng không cần phải được gọi trên các đối tượng lớp. Do đó, các phương thức lớp còn được gọi là các phương thức xuất xưởng hoặc các hàm tạo thay thế. Một ví dụ về hàm tạo thay thế được hiển thị bên dưới

>>>animal = Animal(2)
>>>animal.legs
2
>>>animal = Animal.change_legs()
>>>animal.legs
4

Một ví dụ thực hiện của classmethod có thể được nhìn thấy. Ngoài classmethods và staticmethods, các phương thức trừu tượng được sử dụng rất nhiều. Bạn có thể đọc về các phương thức trừu tượng và các lớp cơ sở trừu tượng tại đây. Trăn hạnh phúc

Điều đó có nghĩa là gì nếu một cái gì đó không được liên kết trong Python?

Một ký hiệu chưa được gán giá trị khi gán hoặc trong lệnh gọi hàm được gọi là "không liên kết. ”

Tự ràng buộc với Python là gì?

self đại diện cho thể hiện của lớp. Bằng cách sử dụng “self”, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong python. Nó liên kết các thuộc tính với các đối số đã cho . Lý do bạn cần sử dụng bản thân. là do Python không sử dụng cú pháp @ để chỉ các thuộc tính thể hiện.

__ nhận __ trong Python là gì?

__get__ " Được gọi để lấy thuộc tính của lớp chủ sở hữu (quyền truy cập thuộc tính lớp) hoặc của một thể hiện của lớp đó (quyền truy cập thuộc tính thể hiện)."

Phương thức lớp Python là gì?

Phương thức lớp trong Python là gì. Các phương thức của lớp là các phương thức được gọi trên chính lớp đó, không phải trên một thể hiện đối tượng cụ thể . Do đó, nó thuộc về một cấp độ lớp và tất cả các thể hiện của lớp đều chia sẻ một phương thức lớp. Một phương thức lớp được liên kết với lớp chứ không phải đối tượng của lớp. Nó chỉ có thể truy cập các biến lớp.