Tên thuộc tính động Python

Câu trả lời nhanh. Thuộc tính tĩnh là các biến được xác định một lần cho lớp và được chia sẻ bởi tất cả các phiên bản. Thuộc tính động là các biến được xác định chỉ cho các phiên bản riêng lẻ. Các biến tĩnh được sử dụng làm "dự phòng" khi không có thuộc tính động rõ ràng nào được xác định cho các phiên bản. Khi bạn cố gắng “ghi đè” một thuộc tính tĩnh, chẳng hạn như trong

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
6, bạn thực sự tạo một thuộc tính động trên phiên bản đó, thuộc tính này tồn tại tách biệt với bất kỳ thuộc tính tĩnh nào
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
7 cho lớp
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
8

Có phải bạn vừa vấp phải các thuật ngữ “thuộc tính tĩnh” và “thuộc tính động” và tự hỏi ý nghĩa của chúng—và sự khác biệt giữa chúng là gì? . Vậy hãy bắt đầu

Bạn cũng có thể xem video giải thích của tôi khi bạn đọc qua bài viết còn lại

Thuộc tính tĩnh và động trong Python - Sự khác biệt là gì?

Tên thuộc tính động Python

Xem video này trên YouTube

Thuộc tính tĩnh và động trong Python – Đâu là sự khác biệt?

Bằng cách nghiên cứu câu hỏi này, bạn sẽ nâng cao hiểu biết của mình về lập trình hướng đối tượng. Vì vậy, hãy chia câu hỏi này thành hai câu hỏi đơn giản hơn

  • Thuộc tính tĩnh là gì?
  • Thuộc tính động là gì?

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

? . Nếu bạn thay đổi giá trị của thuộc tính tĩnh, tất cả các phiên bản sẽ thấy sự thay đổi này. Hãy nghĩ về chúng như các biến được chia sẻ

Đây là một ví dụ đơn giản

class Book:
    # static attribute / class attribute
    classification = "textual"

coffee_break_python = Book()
hitchhikers_guide = Book()

print(Book.classification)
# textual
print(coffee_break_python.classification)
# textual
print(hitchhikers_guide.classification)
# textual

Trong mã, chúng tôi xác định thuộc tính tĩnh

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9 cho lớp
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
0. Bạn có thể truy cập thuộc tính này không chỉ thông qua tên lớp
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
0 mà còn thông qua các thể hiện
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
1 và
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
2

Nghĩ theo cách này. các biến thể hiện không có thuộc tính riêng của chúng

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9. Do đó, trình thông dịch cố gắng khắc phục điều này bằng cách tra cứu hệ thống phân cấp lớp để tìm định nghĩa đầu tiên của thuộc tính được yêu cầu
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9. Sau đó, nó tìm thuộc tính ở cấp độ lớp

?

Ok, bây giờ bạn đã sẵn sàng để giải một câu đố nhanh với các định nghĩa trên

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)

Đầu ra của câu đố này là gì?

Rất có thể, bạn đã tìm thấy câu trả lời đúng. Đoạn mã thay đổi giá trị của thuộc tính lớp. Thể hiện của lớp

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
2 không có định nghĩa riêng về
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9, vì vậy nó mượn định nghĩa từ thuộc tính lớp. Do đó, kết quả là
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
7

Hãy cùng xem câu đố này

## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)

Đầu ra bây giờ là gì? . Có nó?

chuyện gì xảy ra ở đây thế?

  • Bạn có một thuộc tính lớp tĩnh
  • Bạn thay đổi nó ở cấp độ phiên bản (thành “âm thanh”)
  • Bạn in thuộc tính lớp bằng cách gọi nó qua một thể hiện khác

Do đó kết quả là

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
8. Đúng?

Sai

Kết quả là

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9. Vậy tại sao lại như vậy?

Để hiểu điều này, trước tiên bạn phải hiểu khái niệm “thuộc tính động”

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

? . Bạn đặt chúng một cách linh hoạt trong thời gian chạy, nghĩa là sau khi tạo các phiên bản. Trong Python, mọi thứ đều là đối tượng (kể cả hàm). Vì vậy, bạn có thể xác định thuộc tính thể hiện động cho hầu hết mọi thứ

Bây giờ, bạn có thể giải câu đố sau không?

## Puzzle 3
class Universe:
    None

def answer():
    return 42

u = Universe()
u.answer = 21
answer.answer = 21

print(answer.answer + u.answer == answer())

Đầu ra của câu đố mã này là gì?

Khó hiểu, tôi biết. Nhưng hãy cam kết với “câu trả lời” của bạn trước

Trong câu đố, chúng ta tạo ra hai đối tượng. đối tượng

## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
0 được gán cho tên
## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
1 và đối tượng chức năng được gán cho tên
## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
2

(Bây giờ chúng ta đừng tranh luận liệu một lớp có phải là một đối tượng hay không… ;))

Đối với cả hai đối tượng, chúng tôi tạo một thuộc tính động

## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
2

?

Đây là câu trả lời cho câu hỏi được giải quyết trong bài viết này

Lớp

## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
0 và tất cả các thể hiện tiềm năng khác của lớp này không biết thuộc tính
## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
2. Nó chỉ được xác định cho thể hiện
## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
1 và thể hiện
## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
2. Đó là nó

Nhân tiện. kết quả của Câu đố 3 là

## Puzzle 2
Book.classification = "text"
hitchhikers_guide.classification = "audio"
print(coffee_break_python.classification)
8

Nhưng quan trọng hơn, giờ đây chúng ta có thể hiểu tại sao Câu đố 2 cho kết quả là

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
8 mà không phải là
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
9

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
1

Dòng đầu tiên nói về thuộc tính tĩnh của lớp. Đây là thuộc tính mặc định nếu một phiên bản chưa xác định thuộc tính riêng của nó

Dòng thứ hai nói về thuộc tính động của thể hiện

## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
2. Nó chỉ được xác định cho trường hợp này. Vì vậy, cuốn sách
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
1, vui lòng tìm hiểu thêm về bộ Coffee Break Python tại đây, không biết gì về thuộc tính động của cuốn sách kia. Nó chỉ biết về thuộc tính tĩnh từ lớp
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
0

Tóm lược

Tóm lại, bạn đã tìm hiểu về sự khác biệt giữa các thuộc tính tĩnh và động trong Python. Các thuộc tính tĩnh được xác định một lần cho lớp — và được sử dụng làm “dự phòng” trong trường hợp không có thuộc tính động rõ ràng nào được xác định cho các thể hiện. Ngay khi bạn cố gắng “ghi đè” một thuộc tính tĩnh

## Puzzle 3
class Universe:
    None

def answer():
    return 42

u = Universe()
u.answer = 21
answer.answer = 21

print(answer.answer + u.answer == answer())
4 bằng cách gọi nó là thể hiện
## Puzzle 3
class Universe:
    None

def answer():
    return 42

u = Universe()
u.answer = 21
answer.answer = 21

print(answer.answer + u.answer == answer())
5, chẳng hạn như trong
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
6, bạn thực sự tạo một thuộc tính động trên thể hiện đó, thuộc tính này tồn tại tách biệt với bất kỳ thuộc tính tĩnh nào
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
7 cho lớp
## Puzzle 1
Book.classification = "video"
print(hitchhikers_guide.classification)
8

(Tuyên bố từ chối trách nhiệm. Tôi biết rằng thuật ngữ “thuộc tính tĩnh” không quá phổ biến trong Python nhưng tôi thực sự thấy nó khá hữu ích để giải thích mọi thứ. )

Đi đâu từ đây?

Bạn có thích học Python dựa trên câu đố không? . Tuy nhiên, tôi chưa tìm thấy bất kỳ cuốn sách học Python dựa trên câu đố nào trên thị trường. Đó là lý do tại sao tôi đã viết sách giáo khoa Python “Coffee Break Python” dựa trên 100% tư duy học tập dựa trên câu đố. Nhận sách ngay

Tên thuộc tính động Python

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Thuộc tính động là gì?

Các thuộc tính động đại diện cho các đặc điểm thay đổi của tài nguyên . Ví dụ: các thuộc tính động của tài nguyên máy chủ sẽ xác định những thứ như số lượng trung bình các quy trình đang chờ trong hàng đợi chạy, thời gian nhàn rỗi của bộ xử lý và số lượng người dùng hiện đang đăng nhập.

Tên thuộc tính trong Python là gì?

Có hai loại tên thuộc tính hợp lệ. các thuộc tính và phương thức dữ liệu . Một loại tham chiếu thuộc tính thể hiện khác là một phương thức. Một phương thức là một hàm “thuộc về” một đối tượng. (Trong Python, thuật ngữ phương thức không phải là duy nhất đối với các thể hiện của lớp. các loại đối tượng khác cũng có thể có các phương thức.

__ nhận __ trong Python là gì?

__get__ " Được gọi để lấy thuộc tính của lớp chủ sở hữu (quyền truy cập thuộc tính lớp) hoặc của một thể hiện của lớp đó (quyền truy cập thuộc tính thể hiện)."

__ mới __ trong Python là gì?

Python __new__() là phương thức khởi tạo kiểm soát việc tạo phiên bản mới . Nó được gọi đầu tiên và nó trả về một thể hiện của lớp mới. Python __init__() là phương thức khởi tạo để thiết lập các thuộc tính (i. e. , trạng thái) của phiên bản mới được tạo. Nó được gọi sau khi tạo và không trả về gì cả, tôi. e. , Không có.