Hướng dẫn python getattr
answer 168
Có chỉ có hai trường hợp mà
168 hữu ích 5 bình luận chia sẻ answer 305 Các đối tượng trong Python có thể có các thuộc tính - thuộc tính dữ liệu và các hàm để làm việc với (các phương thức) đó. Trên thực tế, mọi đối tượng đều có các thuộc tính tích hợp sẵn. Ví dụ, bạn có một đối tượng Bạn truy cập vào các thuộc tính (có thể là phương pháp hay đối tượng dữ liệu) thường viết: Nhưng điều gì
sẽ xảy ra nếu bạn không biết tên của thuộc tính tại thời điểm bạn viết chương trình? Ví dụ, bạn có tên của thuộc tính được lưu trữ trong một biến được gọi là nếu
sau đó, thay vì viết
bạn có thể viết
Một số thực hành:
Nhưng bạn có thể chuyển một giá trị mặc định làm đối số thứ ba, giá trị này sẽ được trả về nếu thuộc tính đó không tồn tại:
Bạn có thể sử dụng
Một cách sử dụng thực tế cho việc này là tìm tất cả các phương thức có tên bắt đầu bằng Tương tự như
305 hữu ích 2 bình luận chia sẻ answer 112 Đối với
tôi, Nó cho phép bạn gọi các phương thức dựa trên nội dung của một chuỗi thay vì nhập tên phương thức. Ví dụ, bạn không thể làm điều này:
bởi vì x không thuộc loại
Nó cho phép bạn kết nối động với các đối tượng dựa trên đầu vào của bạn. Tôi thấy nó hữu ích khi xử lý các đối tượng và mô-đun tùy chỉnh. 112 hữu ích 3 bình luận chia sẻ answer 45 Một trường hợp sử dụng khá phổ biến Ví dụ: trong một khung công tác web như Django hoặc Pylons,
thành "khách hàng" và "danh sách". Sau đó, nó tìm kiếm một lớp
điều khiển được đặt tên Khi bạn nắm được ý tưởng này, việc mở rộng chức năng của ứng dụng web trở nên thực sự dễ dàng: chỉ cần thêm các phương thức mới vào các lớp bộ điều khiển, sau đó tạo liên kết trong các trang của bạn sử dụng các URL thích hợp cho các phương thức đó. Tất cả điều này được thực hiện
bởi 45 hữu ích 0 bình luận chia sẻ answer 15 Dưới đây là một ví dụ nhanh và dễ hiểu về cách một lớp có thể kích hoạt các phiên bản khác nhau của phương thức lưu tùy thuộc vào hệ điều hành mà nó đang được thực thi khi sử dụng
Bây giờ, hãy sử dụng lớp này trong một ví dụ:
15 hữu ích 0 bình luận chia sẻ answer 8 Ngoài tất
cả các câu trả lời tuyệt vời ở đây, có một cách để sử dụng Tình huống Giả sử cấu trúc thư mục của bạn như sau:
Và, bạn có chức năng để nhận thông tin về
Bây giờ, giả sử bạn muốn trả lại các khả năng của từng người trong số họ theo yêu cầu trong
... và nhiều chức năng khác trả về các giá trị khác nhau dựa trên các phím và siêu anh hùng. Với sự giúp đỡ của
Bạn đã giảm đáng kể số lượng dòng mã, hàm và sự lặp lại! Ồ và tất nhiên, nếu bạn có tên xấu như
LƯU Ý: Đối với vấn đề cụ thể này, có thể có những cách thông minh hơn để đối phó với tình huống, nhưng ý tưởng là cung cấp một cái nhìn sâu sắc về việc sử dụng 8 hữu ích 0 bình luận chia sẻ answer 4
4 hữu ích 1 bình luận chia sẻ answer 4 Đôi khi tôi sử
dụng So sánh những điều sau:
Về điều này:
Ưu điểm của cách thứ hai là 4 hữu ích 0 bình luận chia sẻ answer 3 Khá thường xuyên khi tôi tạo tệp XML từ dữ liệu được lưu trữ trong một lớp, tôi thường xuyên nhận được lỗi nếu thuộc tính không tồn tại hoặc thuộc loại
Nếu tôi đã từng
Nếu giá trị thuộc tính là kiểu
Tôi sử dụng phương pháp sau để xử lý những trường hợp này ngay bây giờ:
Đây là khi nào và cách tôi sử dụng 3 hữu ích 0 bình luận chia sẻ answer 3 Một cách sử dụng khác của getattr () trong việc triển khai một câu lệnh switch trong Python. Nó sử dụng cả hai phản xạ để có được loại trường hợp.
3 hữu ích 1 bình luận chia sẻ answer 2 setattr () Chúng tôi sử dụng setattr để thêm một thuộc tính vào cá thể lớp của chúng tôi. Chúng tôi chuyển thể hiện lớp, tên thuộc tính và giá trị. getattr () Với getattr, chúng tôi lấy lại các giá trị này Ví dụ
2 hữu ích 0 bình luận chia sẻ answer 2 Tôi nghĩ rằng ví dụ này là tự giải thích. Nó chạy phương thức của tham số đầu tiên, có tên được đưa ra trong tham số thứ hai.
2 hữu ích 0 bình luận chia sẻ answer 0 Nó cũng được làm rõ từ https://www.programiz.com/python-programming/methods/built-in/getattr
Tuổi là: 23 Tuổi là: 23
Giới tính là: Nam AttributeError: Đối tượng 'Person' không có thuộc tính 'sex' 0 hữu ích 0 bình luận chia sẻ answer 0 Tôi đã thử bằng Python2.7.17 Một số bạn bè đã trả lời. Tuy nhiên tôi đã cố gắng gọi getattr (obj, 'set_value') và điều này không thực thi phương thức set_value, Vì vậy, tôi đã thay đổi thành getattr (obj, 'set_value') () -> Điều này giúp gọi tương tự. Mã ví dụ: Ví dụ 1:
0 hữu ích 0 bình luận chia sẻ |