Trong bài đăng trên blog này, chúng tôi sẽ giải thích các loại phương thức tồn tại, cách chúng hoạt động và chúng khác nhau như thế nào [và từ các hàm. ]
Ở cuối bài đăng này, bạn sẽ có hiểu biết vững chắc về các Phương thức Python và Lập trình hướng đối tượng nói chung
Để biết phương thức là gì, hãy nghĩ về chúng như những hàm bình thường nằm trong một lớp với một thay đổi nhỏ
Khi chúng ta gọi một phương thức, Python sẽ thực hiện một số công việc đằng sau hậu trường, đó là lý do tại sao chúng hoạt động khác với các hàm thông thường
Có 3 loại phương pháp. phương thức thể hiện, phương thức lớp và phương thức tĩnh
Phương thức sơ thẩm là gì?Các phương thức sơ thẩm là phổ biến nhất và là loại phương thức mặc định
Chúng trông giống như các hàm bình thường, nằm trong một lớp và yêu cầu một tham số đặc biệt, thường được gọi là
def __init__[self, name, grades]:
self.name = name
self.grades = grades
2Khi chúng ta gọi một phương thức, chúng ta không tự truyền giá trị cho tham số đầu tiên này. Python đảm nhiệm việc đó và chuyển đối tượng người gọi làm đối số đầu tiên cho lệnh gọi phương thức. Điều đó cho phép chúng ta truy cập các thuộc tính khác nhau của thể hiện đối tượng trong phương thức
Đối tượng người gọi là gì?
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
Ở đây chúng tôi đã tạo một lớp
def __init__[self, name, grades]:
self.name = name
self.grades = grades
3 với hai phương thức thể hiện. def __init__[self, name, grades]:
self.name = name
self.grades = grades
4 và def __init__[self, name, grades]:
self.name = name
self.grades = grades
5Chúng tôi đang gọi phương thức trên thể hiện đối tượng giống như một hàm bình thường, với dấu ngoặc đơn.
def __init__[self, name, grades]:
self.name = name
self.grades = grades
6 nhưng có dấu chấm giữa đối tượng và tên phương thức. Điều này báo hiệu rằng phương thức nằm bên trong đối tượngChúng ta hãy xem xét từng phương pháp một cách riêng biệt
def __init__[self, name, grades]:
self.name = name
self.grades = grades
Phương thức
def __init__[self, name, grades]:
self.name = name
self.grades = grades
4 được gọi khi chúng ta tạo một đối tượng mới. Nó có tham số def __init__[self, name, grades]:
self.name = name
self.grades = grades
2 cũng như bất kỳ số lượng tham số nào khác. Khi tạo một đối tượng, chúng tôi chuyển các giá trị cho mọi tham số ngoại trừ def __init__[self, name, grades]:
self.name = name
self.grades = grades
2, như vậyclass Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
0Phương thức khác trong lớp của chúng tôi được gọi là
def __init__[self, name, grades]:
self.name = name
self.grades = grades
5class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
2Phương thức này chỉ có tham số
def __init__[self, name, grades]:
self.name = name
self.grades = grades
2. Python sẽ tự động cung cấp cho tham số này một giá trị khi chúng ta gọi phương thức trên một đối tượng mà chúng ta đã tạoHãy tạo một đối tượng và gọi phương thức trên đó
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
4Đây là cách dòng lệnh gọi hàm diễn ra trong đoạn mã này
- Đầu tiên chúng ta tạo một đối tượng với
02. Điều này gọi phương thứcclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
4 của lớp chúng ta và chuyển hai đối số làm giá trị chodef __init__[self, name, grades]: self.name = name self.grades = grades
04 vàclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
05class Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
- Giá trị của
2 được cung cấp bởi Python. Đó là một đối tượng rỗngdef __init__[self, name, grades]: self.name = name self.grades = grades
- Sau đó, chúng tôi đặt hai thuộc tính bên trong đối tượng,
07 vàclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
08. Chúng tôi cũng có thể đặt bất kỳ thuộc tính nào khác mà chúng tôi muốnclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
- Giá trị của
- Điều này trả về đối tượng chúng ta đã tạo và gán nó cho biến
09class Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
- Khi chúng tôi gọi
20, Python sẽ tự động chuyểnclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
09 làm giá trị choclass Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
2, vì vậy bên trong phương thức, chúng tôi có quyền truy cập vào các thuộc tính mà chúng tôi đã đặt trước đó, bên trongdef __init__[self, name, grades]: self.name = name self.grades = grades
4def __init__[self, name, grades]: self.name = name self.grades = grades
Hãy để chúng tôi tạo thêm một đối tượng để xem điều gì sẽ xảy ra
def __init__[self, name, grades]:
self.name = name
self.grades = grades
7Bây giờ chúng ta có thể thấy rằng phương thức thể hiện truy cập các thuộc tính từ từng cá thể đối tượng riêng lẻ
Đây là một mã ví dụ minh họa những gì Python làm trong nền để giúp bạn hiểu lý thuyết này tốt hơn
def __init__[self, name, grades]:
self.name = name
self.grades = grades
8Khi nào bạn nên sử dụng các phương thức cá thể?
- Các phương thức sơ thẩm là lựa chọn của bạn khi nói đến Lập trình hướng đối tượng Python
- Sử dụng các phương thức thể hiện khi phương thức sẽ truy cập các thuộc tính của đối tượng người gọi
Như tên gọi của chúng, các phương thức của lớp có thể được truy cập thông qua lớp. Họ nhận lớp của người gọi làm đối số và hoàn toàn không yêu cầu tạo đối tượng
Các phương thức lớp vẫn yêu cầu một tham số đặc biệt, nhưng thay vì
def __init__[self, name, grades]:
self.name = name
self.grades = grades
2, nó thường được gọi là class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
25 [viết tắt của lớp]. Để định nghĩa một phương thức lớp, chúng ta sử dụng trình trang trí class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
26Đây là một ví dụ ngắn
def __init__[self, name, grades]:
self.name = name
self.grades = grades
2Khi nào sử dụng các phương thức lớp?
- Sử dụng các phương thức lớp khi bạn cần truy cập trạng thái của lớp và không chỉ một thể hiện đối tượng
- Chúng có thể hữu ích khi bạn muốn thực hiện các thay đổi trên tất cả các phiên bản của lớp
- Một lợi ích bổ sung cho các phương thức lớp là chúng tự động sử dụng lớp con nếu bạn đang ở trong một tình huống kế thừa
Ở đây chúng ta có thể xem ví dụ về kịch bản thừa kế nơi chúng ta sử dụng phương thức lớp
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
27def __init__[self, name, grades]:
self.name = name
self.grades = grades
4Chúng tôi đã định nghĩa lớp
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
28 mở rộng lớp class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
29. Nó có một phương thức def __init__[self, name, grades]:
self.name = name
self.grades = grades
4 gọi tên của cha mẹ là def __init__[self, name, grades]:
self.name = name
self.grades = grades
4 và một phương thức class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
42 sẽ ghi đè lên cha mẹ. Nó không có phương thức class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
27 vì phương thức đó được kế thừa và chúng tôi sẽ chỉ sử dụng phương thức mà cha mẹ đã xác địnhBây giờ bạn có thể tự hỏi. tại sao không tạo đối tượng như bình thường, với
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
44 thay vì class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
45?Hãy xem điều gì sẽ xảy ra nếu chúng ta mã hóa cứng phương thức bằng
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
29. Hãy chú ý đến phương pháp lớp họcdef __init__[self, name, grades]:
self.name = name
self.grades = grades
4Chúng tôi đã thay đổi mã một chút để phương pháp
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
27 hiện đang gọi class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
44 thay vì class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
45Tuy nhiên, hãy xem điều gì sẽ xảy ra khi chúng ta cố gắng sử dụng phương thức đó từ lớp
class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
28def __init__[self, name, grades]:
self.name = name
self.grades = grades
0Vì
def __init__[self, name, grades]:
self.name = name
self.grades = grades
71 đang sử dụng triển khai siêu lớp, nên nó trả về một class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
29. Đây rất có thể không phải là điều chúng tôi muốn và đó là lý do chính để sử dụng tham số class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
25 với class Student:
def __init__[self, name, grades]:
self.name = name
self.grades = grades
def average[self]:
return sum[self.grades] / len[self.grades]
college_student = Student['Rolf', [24, 55, 98, 100]]
print[college_student.average[]] # 69.25
26 thay thếPython sẽ tự động cung cấp cho chúng ta lớp người gọi thay vì lớp mà chúng ta mã hóa cứng bên trong chính phương thức đó. Điều này có nghĩa là mã linh hoạt hơn và chúng tôi không phải triển khai lại điều tương tự trong các lớp con chỉ để trả về đúng loại đối tượng
Phương thức tĩnh là gì?Các phương thức tĩnh là các hàm thông thường sống bên trong lớp để chỉ ra một mức độ quan hệ nhất định với nó
Chúng không yêu cầu một tham số đặc biệt và không nhận thể hiện của đối tượng hoặc thể hiện của lớp làm đối số theo mặc định. Thay vào đó, những gì họ yêu cầu là trình trang trí
def __init__[self, name, grades]:
self.name = name
self.grades = grades
75Chúng tôi gọi chúng là các phương thức độc lập vì chúng không có quyền truy cập vào thể hiện hoặc lớp giống như các loại phương thức khác.
Khi nào bạn nên sử dụng các phương thức tĩnh?
Các phương thức tĩnh nên được sử dụng khi chúng ta không cần truy cập vào lớp hoặc cá thể. Ví dụ: khi in dữ liệu hoặc thực hiện phép tính số học
Ở đây chúng tôi tạo một chuỗi k ký tự ngẫu nhiên cho người dùng bằng phương thức tĩnh
def __init__[self, name, grades]:
self.name = name
self.grades = grades
1Chúng ta có thể thấy rằng bằng cách đặt
def __init__[self, name, grades]:
self.name = name
self.grades = grades
76 như một phương thức tĩnh bên trong lớp def __init__[self, name, grades]:
self.name = name
self.grades = grades
77 bằng cách sử dụng trình trang trí def __init__[self, name, grades]:
self.name = name
self.grades = grades
75, phương thức này không còn mong đợi một tham số đặc biệt hoặc bất kỳ tham số bắt buộc nào nữa.Một lợi thế giữa việc sử dụng một phương thức tĩnh so với một hàm bình thường là bằng cách nhóm chúng bên trong một lớp sẽ có ý nghĩa hơn vì các phương thức tĩnh chỉ ra rằng chúng chỉ có thể được sử dụng liên quan đến lớp
Tóm lược- Phương thức cá thể nhận đối tượng người gọi làm tham số đầu tiên và nó không yêu cầu trình trang trí
- Phương thức lớp nhận lớp người gọi làm tham số đầu tiên và nó yêu cầu trình trang trí
26class Student: def __init__[self, name, grades]: self.name = name self.grades = grades def average[self]: return sum[self.grades] / len[self.grades] college_student = Student['Rolf', [24, 55, 98, 100]] print[college_student.average[]] # 69.25
- Phương thức tĩnh không nhận bất kỳ tham số cần thiết nào và nó yêu cầu trình trang trí
75def __init__[self, name, grades]: self.name = name self.grades = grades
chúng ta đi thôi. Chúng tôi đã trải qua mọi loại phương thức Python và bây giờ bạn có thể phân biệt và sử dụng chúng. Chúng tôi hy vọng bạn thích bài đăng trên blog này. Đừng quên đăng ký nhận bản tin của chúng tôi để được thông báo khi chúng tôi xuất bản bài đăng blog mới
Sự thật thú vị. Bạn có biết rằng sự khác biệt giữa phương thức tĩnh và phương thức lớp là một trong những câu hỏi được hỏi nhiều nhất trong các cuộc phỏng vấn xin việc không?