Cảm ơn vì bài viết của bạn. Khi khai báo các giá trị mặc định, sự khác biệt giữa việc sử dụng các thuộc tính lớp so với các đối số của hàm init là gì? Show lớp Người. và lớp Người. Có rủi ro hoặc lợi thế liên quan đến một trong hai cách tiếp cận? Shai nói.Xin chào, cảm ơn vì bài viết Tuy nhiên, tôi nghĩ rằng ví dụ bạn đã sử dụng - Gfg 400033 - không phải là một ví dụ tốt. Nó hoạt động trong trường hợp của bạn, bởi vì Person. dân số được định nghĩa là một số nguyên, không thay đổi; . Nhưng nếu giá trị ban đầu có thể thay đổi, thì ý nghĩa sẽ thay đổi thành Gfg 400035 — phép gán được đặt trước bởi sự thay đổi tại chỗ, thay đổi thuộc tính lớp Sử dụng phép gán tăng cường (+= và các anh chị em của nó) theo cách này, IMO, dễ bị lỗi và nên tránh Reuven Lerner nói. Tôi nghĩ rằng đó là một ví dụ rất hay về những gì sẽ xảy ra khi mọi người không hiểu mô hình đối tượng Python — cụ thể là Python trước tiên tìm kiếm các thuộc tính trên một cá thể, sau đó trên một lớp và chúng ta có thể đặt cùng một thuộc tính trên . Tôi đã thấy *nhiều* người nhầm lẫn với khái niệm này và ngạc nhiên với những gì xảy ra trong mã Python của họ Liệu tôi có thực sự theo dõi dân số theo cách này hay không là một câu hỏi khác. Câu trả lời có lẽ là không, bởi vì tôi sẽ sử dụng cơ sở dữ liệu để theo dõi các đối tượng cho tôi Mục tiêu của tôi (ở đây, và trong cuốn sách của tôi) là sử dụng các bài tập như một cách đầu tiên để làm chúng bối rối và sau đó gỡ rối chúng ra. Khi làm như vậy, tôi hy vọng sẽ làm sáng tỏ những lĩnh vực của Python mà mọi người chưa hiểu rõ, để hiểu sâu hơn về ngôn ngữ này và do đó sử dụng nó một cách thông minh hơn Tôi đồng ý rằng hiểu được sự khác biệt giữa + và +=, và nhu cầu xác định __iadd__ nếu bạn muốn đối tượng của mình xử lý +=, là một điểm tốt, một điểm mà tôi có thể nên nhấn mạnh hơn trong các lớp học và bài viết của mình Reuven Lerner nói. Câu trả lời ngắn gọn là không. ” Luôn có thể thêm thuộc tính mới vào đối tượng Python Tuy nhiên, có một số thủ thuật mà bạn có thể chơi để làm cho nó khó hơn. Ví dụ: bạn có thể xác định thuộc tính cấp lớp có tên __slots__ đặt tên cho các thuộc tính bạn muốn xác định. Nếu bạn làm vậy, thì Python sẽ thay đổi cách lưu trữ các thuộc tính, khiến bạn không thể thêm chúng theo cách thông thường Nhưng quy tắc chung trong Python là mọi thứ đều mở và năng động, điều này có khả năng dẫn đến các vấn đề, nhưng thường thì không. Reuven Lerner nói. Có, cả “blah” và “x” đều là thuộc tính của đối tượng lớp, Foo x được gán cho một số nguyên blah được gán cho một chức năng. Tuy nhiên, nó không *chỉ* là một chức năng. Đó là một phương pháp, và một phương pháp “không giới hạn”, ở điểm đó. Nếu bạn định nghĩa một hàm bên trong từ khóa “class”, thì định nghĩa hàm đó được xử lý đặc biệt, do đó bạn không thể gọi Foo. blah() (như thể đó là một lớp hoặc phương thức tĩnh), nhưng để bạn có thể nói Foo(). blah() (như một phương thức thể hiện) Reuven Lerner nói. À, xin lỗi - tôi thực sự nên đánh vần điều đó Giải pháp là đặt tên rõ ràng cho lớp, sao cho chúng ta vừa thiết lập vừa truy xuất từ thuộc tính lớp. Đó là, thay vì Thuộc tính lớp. Thuộc tính lớp là duy nhất cho mỗi lớp. Mỗi thể hiện của lớp sẽ có thuộc tính này. Thí dụ Python3Gfg 400036 Gfg 400037 Gfg 400038 Gfg 400039 Gfg 400040 Gfg 400041 Gfg 400040 Gfg 40001 Gfg 40002 Gfg 40003 Gfg 40004 Gfg 400040 Gfg 40006 Gfg 400040 Gfg 40008 Gfg 40009 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Getting value Happy Coding! Setting value to Hey Coder! Deleting value1 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2______73____74 Gfg 40002 Getting value Happy Coding! Setting value to Hey Coder! Deleting value6 Gfg 400039 Getting value Happy Coding! Setting value to Hey Coder! Deleting value8 Getting value Happy Coding! Setting value to Hey Coder! Deleting value9 Gfg 400060 Gfg 40002 Gfg 400062 Gfg 400063 Gfg 400064 Gfg 400065 Gfg 400063 Gfg 400067 Gfg 400068____169 Gfg 400040 Gfg 4000361 Gfg 40002 Gfg 400062 Gfg 400063 Gfg 4000365 Gfg 400063 Gfg 400068____1368 Gfg 400039 Gfg 400068____1371 đầu ra Gfg 40002 Trong ví dụ trên, biến đếm là một thuộc tính của lớp Thuộc tính sơ thẩm. Các thuộc tính của đối tượng là duy nhất cho mỗi đối tượng, (một đối tượng là tên gọi khác của một đối tượng). Mỗi đối tượng/thực thể đều có thuộc tính riêng và có thể thay đổi mà không ảnh hưởng đến các thực thể khác Thí dụ Python3Gfg 4000372 Gfg 400037 Gfg 400038 Gfg 400039 Gfg 400040 Gfg 4000377 Gfg 400040 Gfg 40008 Gfg 4000380 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Getting value Happy Coding! Setting value to Hey Coder! Deleting value1 Gfg 40004 _______72____1385 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2______70____1388 Gfg 40002 Gfg 4000390 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2______70____1393 Gfg 40002 Gfg 4000395 Gfg 400039 Gfg 400040 Gfg 40006 Gfg 400040 Gfg 40008 Gfg 4000401 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Getting value Happy Coding! Setting value to Hey Coder! Deleting value1 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2____168 Gfg 4000406 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 4000408 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2____168 Gfg 4000406 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 4000413 Gfg 400063 Gfg 4000415 Gfg 4000416 Gfg 4000417 Gfg 40002 Gfg 4000419 Gfg 400063 Gfg 400001 Gfg 400002 đầu ra Gfg 4000 Bây giờ, hãy xem một ví dụ về thuộc tính 1) Tạo Thuộc tính của một lớp bằng hàm property().
Thí dụ Python3Gfg 4000372 Gfg 400037 Gfg 400005 Gfg 400039 Gfg 400040 Gfg 4000377 Gfg 400040 Gfg 40008 Gfg 4000380 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 400013 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2______70____016 Gfg 40002 Gfg 400018 Gfg 400019 Gfg 400040 Gfg 400021 Gfg 400040 Gfg 40008 Gfg 400024 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Getting value Happy Coding! Setting value to Hey Coder! Deleting value1 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2____168 Gfg 4000406 Gfg 400030 Gfg 400031 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2 Gfg 400033 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 400035 Gfg 400019 Gfg 400040 Gfg 400038 Gfg 400040 Gfg 40008 Gfg 400041 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 400013 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2____168 Gfg 4000406 Gfg 400047 Getting value Happy Coding! Setting value to Hey Coder! Deleting value4 Gfg 400049 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2______70____016 Gfg 40002 Gfg 400018 Gfg 400019 Gfg 400040 Gfg 400057 Gfg 400040 Gfg 40008 Gfg 400060 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Getting value Happy Coding! Setting value to Hey Coder! Deleting value1 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2____168 Gfg 4000406 Gfg 400066 Gfg 400031 Getting value Happy Coding! Setting value to Hey Coder! Deleting value2 Gfg 400069 Getting value Happy Coding! Setting value to Hey Coder! Deleting value0 Gfg 400035 Gfg 400072 Gfg 400040 Gfg 400074 Gfg 400040 Gfg 400076 Gfg 40002 Gfg 400078 Gfg 400079 Gfg 400039 Gfg 400081 Gfg 4000417 Gfg 40002 Gfg 400084 Gfg 400085 Gfg 400031 Gfg 400068 Gfg 400088 Gfg 400039 Gfg 400090 Gfg 40002 Gfg 400092 Gfg 400039 Gfg 400094 Gfg 400069 Gfg 400090 đầu ra Getting value Happy Coding! Setting value to Hey Coder! Deleting value
2) Tạo Thuộc tính của một lớp Sử dụng trình trang trí @property Chúng ta có thể áp dụng hàm thuộc tính bằng cách sử dụng @property decorator. Đây là một trong những công cụ trang trí tích hợp. Trình trang trí đơn giản là một hàm lấy một hàm khác làm đối số và thêm vào hành vi của nó bằng cách bao bọc nó Thuộc tính và biến có giống nhau không?Mặc dù một thuộc tính thường trực quan, nhưng biến là cách vận hành mà thuộc tính được biểu diễn để xử lý dữ liệu tiếp theo . Trong xử lý dữ liệu, dữ liệu thường được biểu diễn bằng sự kết hợp của các mục (đối tượng được sắp xếp theo hàng) và nhiều biến (được sắp xếp theo cột).
Là một thuộc tính một biến?Biến thuộc tính (đôi khi được gọi là biến thụ động) là một loại biến không bị thao túng trong thử nghiệm .
Thuộc tính trong Python là gì?Các thuộc tính của một lớp là các đối tượng hàm xác định các phương thức tương ứng của các thể hiện của nó . Chúng được sử dụng để thực hiện kiểm soát truy cập của các lớp. Các thuộc tính của một lớp cũng có thể được truy cập bằng các phương thức và hàm tích hợp sau. getattr() – Hàm này được sử dụng để truy cập thuộc tính của đối tượng.
Thuộc tính lớp và biến lớp có giống nhau không?Để đưa ra định nghĩa cơ bản cho cả hai thuật ngữ, thuộc tính lớp là các biến lớp được kế thừa bởi mọi đối tượng của lớp . Giá trị của các thuộc tính lớp vẫn giữ nguyên cho mọi đối tượng mới. Giống như bạn sẽ thấy trong các ví dụ trong phần này, các thuộc tính của lớp được định nghĩa bên ngoài hàm __init__(). |