Tôi có thể gọi phương thức tĩnh với ví dụ trong python không?

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
2

Khi 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
5

Chú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ượng

Chú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ậy

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
0

Phươ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
5

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
2

Phươ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ạo

Hã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

  1. Đầu tiên chúng ta tạo một đối tượ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
    
    02. Điều này gọi phương thức
    def __init__[self, name, grades]:
        self.name = name
        self.grades = grades
    
    4 của lớp chúng ta và chuyển hai đối số làm giá trị cho
    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
    
    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
    
    05
    • Giá trị của
      def __init__[self, name, grades]:
          self.name = name
          self.grades = grades
      
      2 được cung cấp bởi Python. Đó là một đối tượng rỗng
    • Sau đó, chúng tôi đặt hai thuộc tính bên trong đối tượ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
      
      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ốn
  2. Điều này trả về đối tượng chúng ta đã tạo và gán nó cho biế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
    
    09
  3. Khi chúng tôi 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
    
    20, Python sẽ tự động chuyể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
    
    09 làm giá trị cho
    def __init__[self, name, grades]:
        self.name = name
        self.grades = grades
    
    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 trong
    def __init__[self, name, grades]:
        self.name = name
        self.grades = grades
    
    4

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
7

Bâ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
8

Khi 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
Phương thức lớp là gì?

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
2

Khi 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
27

def __init__[self, name, grades]:
    self.name = name
    self.grades = grades
4

Chú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 định

Bâ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ọc

def __init__[self, name, grades]:
    self.name = name
    self.grades = grades
4

Chú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
45

Tuy 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
28

def __init__[self, name, grades]:
    self.name = name
    self.grades = grades
0

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
75

Chú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
1

Chú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í
    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
  • 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í
    def __init__[self, name, grades]:
        self.name = name
        self.grades = grades
    
    75
Phần kết luận

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?

Bạn có thể gọi một phương thức tĩnh trong một phương thức thể hiện không?

Gọi phương thức tĩnh . Cú pháp Java cho phép gọi các phương thức tĩnh từ một thể hiện . Ví dụ: chúng tôi có thể tạo mã này và nó sẽ biên dịch và chạy chính xác. public static void main[String args] {

Bạn có thể gọi một phương thức lớp từ một phiên bản Python không?

Để gọi một phương thức của lớp, hãy đặt lớp đó làm đối số đầu tiên. Các phương thức của lớp có thể được gọi từ các thể hiện và từ chính lớp đó . Tất cả đều sử dụng cùng một phương pháp. Phương thức có thể sử dụng các biến và phương thức của lớp.

Chủ Đề