Thuộc tính trong Python là gì?

Nếu chúng ta đã từng làm việc với các ngôn ngữ mô hình OOPS, chúng ta hẳn đã nghe thấy từ "thuộc tính" khá thường xuyên. Có hai loại thuộc tính-lớp thuộc tính và thuộc tính thể hiện. Hướng dẫn này giải thích thuộc tính là gì và loại của chúng, cùng với các ví dụ

Vì Python là một công cụ hỗ trợ rất lớn cho mô hình OOPS, nên mọi thứ đều được coi là một đối tượng. Chúng tôi tạo các lớp và đối tượng. Trước khi hiểu thuộc tính, hiểu lớp và đối tượng là nền tảng. Nói một cách đơn giản, một lớp giống như một bản thiết kế và để sử dụng bản thiết kế đó, chúng ta tạo các đối tượng cho lớp đó

Ví dụ

đầu ra

Delhi public school
School: Delhi public school
Place: Delhi
grade: 5
Delhi public school
School: Delhi public school
Place: Delhi
grade: 5

hiểu biết

Trong ví dụ trên, chúng tôi đã tạo một lớp gọi là "sinh viên" với ba biến và một hàm in các giá trị của ba biến. Mọi đối tượng chúng ta tạo cho lớp đều có quyền truy cập vào các biến trong lớp. Các biến này được gọi là "Thuộc tính" và các hàm được gọi là phương thức [còn được gọi là hàm]. Trong chương trình trên, chúng ta đã tạo hai đối tượng của lớp, s1 và s2, đồng thời truy cập thuộc tính sch_name và phương thức display[] in giá trị của các thuộc tính

Các loại thuộc tính

Thuộc tính lớp

  • Trong ví dụ trước, chúng ta đã khai báo các thuộc tính không thay đổi, nghĩa là đối với bất kỳ đối tượng nào chúng ta tạo cho lớp, giá trị của các thuộc tính vẫn giữ nguyên
  • Các thuộc tính như vậy được gọi là "Thuộc tính lớp"

Ví dụ

đầu ra

Student1: Ryan
Harvard  Cambridge  Massachusetts  Boston  United States
Student2: Tony
Harvard  Cambridge  Massachusetts  Boston  United States

  • Quan sát rằng thông tin trong lớp đang lưu trữ các giá trị giống nhau đại diện cho địa chỉ của trường đại học và chúng tôi đã sử dụng cùng một thông tin cho tất cả các đối tượng-sinh viên

Thuộc tính sơ thẩm

  • Điều gì sẽ xảy ra nếu chúng ta muốn tạo một lớp cho phép mọi đối tượng có các thuộc tính của nó? . Ví dụ: mọi đối tượng nên chứa thông tin về một học sinh cá nhân
  • Các thuộc tính lớp như vậy có thể cho phép các đối tượng giữ các giá trị khác nhau cho cùng một thuộc tính được gọi là "thuộc tính thể hiện"
  • Chúng ta cần sử dụng phương thức __init__ và biến self để khai báo các thuộc tính này
  • phương thức __init__. Nó là một hàm tạo cho phép các đối tượng có các giá trị khác nhau cho cùng một thuộc tính. Nó được thực thi ngay khi một đối tượng được tạo cho lớp mà không cần bất kỳ lời gọi thủ công nào
  • tự biến. Nó giống như một trình giữ chỗ cho đối tượng được tạo cho lớp bên trong phương thức __init__

Ví dụ

đầu ra

Student1: 
Ryan 18 NYU
Student1: 
Roy 18 Duke

  • Chúng tôi đã tạo hai đối tượng, student1 và student2 và hai đối tượng chứa thông tin khác nhau về hai cá nhân
  • Điều xảy ra ở đây là khi một đối tượng được tạo, phương thức __init__ được gọi và đối tượng sẽ thay thế biến self trong phương thức

Khi chúng ta tạo student1

Khi chúng tôi tạo student2

Cả thuộc tính Instance và thuộc tính Lớp đều đóng vai trò nổi bật trong việc tạo lớp âm thanh. Đây là một ví dụ sử dụng cả biến lớp và biến thể hiện để tạo một lớp

Thuộc tính lớp

Python so với Java. Lập trình hướng đối tượng
03. 40

Đánh dấu là đã hoàn thành

Vật liệu hỗ trợ

Các slide khóa học hướng dẫn được đề xuất [. pdf] Mã mẫu [. nén]

Trở thành Thành viên để tham gia cuộc trò chuyện

Trong một màn hình điện thoại gần đây, tôi đã quyết định sử dụng một thuộc tính lớp để triển khai một API Python nhất định. Người phỏng vấn của tôi đã thách thức tôi, đặt câu hỏi liệu mã của tôi có hợp lệ về mặt cú pháp hay không, khi nó được thực thi, v.v. Trên thực tế, bản thân tôi cũng không chắc chắn về câu trả lời. Vì vậy, tôi đã làm một số đào. Thuộc tính lớp Python. khi nào [hoặc làm thế nào] sử dụng chúng. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn những cạm bẫy phổ biến và kết luận bằng một danh sách các trường hợp sử dụng hợp lệ có thể giúp bạn tiết kiệm thời gian, năng lượng và dòng mã

Chia sẻ

Chia sẻ

Trong một màn hình điện thoại gần đây, tôi đã quyết định sử dụng một thuộc tính lớp để triển khai một API Python nhất định. Người phỏng vấn của tôi đã thách thức tôi, đặt câu hỏi liệu mã của tôi có hợp lệ về mặt cú pháp hay không, khi nó được thực thi, v.v. Trên thực tế, bản thân tôi cũng không chắc chắn về câu trả lời. Vì vậy, tôi đã làm một số đào. Thuộc tính lớp Python. khi nào [hoặc làm thế nào] sử dụng chúng. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn những cạm bẫy phổ biến và kết luận bằng một danh sách các trường hợp sử dụng hợp lệ có thể giúp bạn tiết kiệm thời gian, năng lượng và dòng mã

Tác giả Charles Marsh

Charles đã từng là trưởng nhóm kỹ thuật tại Khan Academy, Cedar và Spring Discovery

Ghi chú của biên tập viên. Bài viết này đã được cập nhật vào ngày 29/11/22 bởi nhóm biên tập của chúng tôi. Nó đã được sửa đổi để bao gồm các nguồn gần đây và phù hợp với các tiêu chuẩn biên tập hiện tại của chúng tôi

Gần đây tôi đã có một màn hình điện thoại phỏng vấn lập trình, trong đó chúng tôi đã sử dụng một trình soạn thảo văn bản hợp tác và điều đó khiến tôi suy nghĩ về các thuộc tính của lớp Python

Tôi được yêu cầu triển khai một API nhất định và đã chọn thực hiện bằng Python. Trừu tượng hóa câu lệnh vấn đề, giả sử tôi cần một lớp có các thể hiện được lưu trữ một số

{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
3 và một số
{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
4

Tôi hít một hơi thật sâu và bắt đầu gõ. Sau một vài dòng, tôi đã có một cái gì đó như thế này

    class Service[object]:
        data = []

        def __init__[self, other_data]:
            self.other_data = other_data
        ...

Người phỏng vấn của tôi đã ngăn tôi lại

  • người phỏng vấn. “Dòng đó

    {:lang='python'}
        class MyClass[object]:
            class_var = 1
    
            def __init__[self, i_var]:
                self.i_var = i_var
    
    5. Tôi không nghĩ đó là Python hợp lệ. ”

  • Tôi. “Tôi khá chắc là. Nó chỉ đặt giá trị mặc định cho thuộc tính thể hiện. ”

  • người phỏng vấn. “Khi nào đoạn mã đó được thực thi?”

  • Tôi. “Tôi không thực sự chắc chắn. Tôi sẽ chỉ sửa nó để tránh nhầm lẫn. ”

Để tham khảo và cung cấp cho bạn ý tưởng về mục đích của tôi, đây là cách tôi sửa đổi mã

    class Service[object]:

        def __init__[self, other_data]:
            self.data = []
            self.other_data = other_data
        ...

Hóa ra, cả hai chúng ta đều sai. Câu trả lời thực sự nằm ở việc hiểu được sự khác biệt giữa các thuộc tính lớp Python và các thuộc tính thể hiện của Python

Ghi chú. Nếu bạn là một chuyên gia xử lý các thuộc tính lớp Python, bạn có thể bỏ qua để chuyển sang các trường hợp sử dụng

Thuộc tính lớp Python

Người phỏng vấn của tôi đã sai ở chỗ đoạn mã trên hợp lệ về mặt cú pháp

Tôi đã sai ở chỗ mã không đặt "giá trị mặc định" cho thuộc tính thể hiện. Thay vào đó, nó định nghĩa

{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
3 như một thuộc tính lớp có giá trị
{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
7

Theo kinh nghiệm của tôi, các thuộc tính lớp Python là một chủ đề mà nhiều người biết điều gì đó, nhưng ít người hiểu hoàn toàn

Biến lớp Python so với. Biến thể hiện. Có gì khác biệt?

Thuộc tính lớp Python là thuộc tính của lớp [thông tư, tôi biết], chứ không phải là thuộc tính của một thể hiện của lớp

Hãy sử dụng một ví dụ lớp Python để minh họa sự khác biệt. Ở đây,

{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
8 là thuộc tính lớp và
{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
9 là thuộc tính thể hiện

{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var

Lưu ý rằng tất cả các phiên bản của lớp đều có quyền truy cập vào

{:lang='python'}
    class MyClass[object]:
        class_var = 1

        def __init__[self, i_var]:
            self.i_var = i_var
8 và nó cũng có thể được truy cập như một thuộc tính của chính lớp đó

{:lang='python'}
    foo = MyClass[2]
    bar = MyClass[3]

    foo.class_var, foo.i_var
    ## 1, 2
    bar.class_var, bar.i_var
    ## 1, 3
    MyClass.class_var ## 

Chủ Đề