Các thuộc tính và biến có giống nhau trong python không?

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ì?

lớp Người.
population = 0
def __init__(self, first, last).
chính mình. đầu tiên = đầu tiên
bản thân. cuối cùng = cuối cùng

lớp Người.
def __init__(bản thân, tên, họ, dân số = 0).
chính mình. đầu tiên = đầu tiên
bản thân. cuối cùng = cuối cùng
chính mình. dân số = dân số

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
4000
33 - 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
4000
35 — 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ụ

Python3




Gfg
4000
36

Gfg
4000
37
Gfg
4000
38

Gfg
4000
39

Gfg
4000
40
Gfg
4000
41

Gfg
4000
40
Gfg
4000
1
Gfg
4000
2
Gfg
4000
3

Gfg
4000
4

Gfg
4000
40
Gfg
4000
6

Gfg
4000
40
Gfg
4000
8
Gfg
4000
9
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
1

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2______73____74
Gfg
4000
2
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
6

Gfg
4000
39

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
8

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
9

Gfg
4000
60
Gfg
4000
2
Gfg
4000
62

Gfg
4000
63

Gfg
4000
64

Gfg
4000
65

Gfg
4000
63

Gfg
4000
67

Gfg
4000
68____169

Gfg
4000
40

Gfg
4000
361
Gfg
4000
2
Gfg
4000
62

Gfg
4000
63

Gfg
4000
365

Gfg
4000
63

Gfg
4000
68____1368

Gfg
4000
39

Gfg
4000
68____1371

đầu ra

Gfg
4000
2

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ụ

Python3




Gfg
4000
372

Gfg
4000
37
Gfg
4000
38

Gfg
4000
39

Gfg
4000
40
Gfg
4000
377

Gfg
4000
40
Gfg
4000
8
Gfg
4000
380
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
1

Gfg
4000
4

_______72____1385

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2______70____1388
Gfg
4000
2
Gfg
4000
390

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2______70____1393
Gfg
4000
2
Gfg
4000
395

Gfg
4000
39

Gfg
4000
40
Gfg
4000
6

Gfg
4000
40
Gfg
4000
8
Gfg
4000
401
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
1

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2____168
Gfg
4000
406
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
408

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2____168
Gfg
4000
406
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
413

Gfg
4000
63

Gfg
4000
415

Gfg
4000
416

Gfg
4000
417
Gfg
4000
2
Gfg
4000
419

Gfg
4000
63

Gfg
4000
01

Gfg
4000
02

đầ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().  

cú pháp. thuộc tính (fget, fset, fdel, doc)

Thí dụ

Python3




Gfg
4000
372

Gfg
4000
37
Gfg
4000
05

Gfg
4000
39

Gfg
4000
40
Gfg
4000
377

Gfg
4000
40
Gfg
4000
8
Gfg
4000
380
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
13

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2______70____016
Gfg
4000
2
Gfg
4000
18

Gfg
4000
19

Gfg
4000
40
Gfg
4000
21

Gfg
4000
40
Gfg
4000
8
Gfg
4000
24
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
1

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2____168
Gfg
4000
406
Gfg
4000
30
Gfg
4000
31

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2
Gfg
4000
33
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
35

Gfg
4000
19

Gfg
4000
40
Gfg
4000
38

Gfg
4000
40
Gfg
4000
8
Gfg
4000
41
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
13

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2____168
Gfg
4000
406
Gfg
4000
47
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
4
Gfg
4000
49

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2______70____016
Gfg
4000
2
Gfg
4000
18

Gfg
4000
19

Gfg
4000
40
Gfg
4000
57

Gfg
4000
40
Gfg
4000
8
Gfg
4000
60
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
1

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2____168
Gfg
4000
406
Gfg
4000
66
Gfg
4000
31

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
2
Gfg
4000
69
Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
0
Gfg
4000
35

Gfg
4000
72

Gfg
4000
40
Gfg
4000
74

Gfg
4000
40
Gfg
4000
76
Gfg
4000
2
Gfg
4000
78
Gfg
4000
79

Gfg
4000
39

Gfg
4000
81

Gfg
4000
417
Gfg
4000
2
Gfg
4000
84
Gfg
4000
85
Gfg
4000
31

Gfg
4000
68
Gfg
4000
88

Gfg
4000
39

Gfg
4000
90
Gfg
4000
2
Gfg
4000
92

Gfg
4000
39

Gfg
4000
94

Gfg
4000
69
Gfg
4000
90

đầ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__().