Hàm hasattr[] trong Python sử dụng để kiểm tra xem đối tượng truyền vào có thuộc tính bạn muốn tìm hay không. Cú pháp của hàm hasattr[] như thế nào, nó có những tham số gì và cách sử dụng ra sao? Mời bạn đọc theo dõi. Các tham số của hàm hasattr[]: Hàm hasattr[] có 2 tham số: Lưu ý: Hàm hasattr [] trả về: Chạy chương trình, kết quả trả về là:hasattr[doituong, tenthuoctinh]
Ví dụ : Hàm hasattr[] hoạt động thế nào?
class Nhanvien:
tuoi = 31
ten = 'QuachTinh'
nhanvien = Nhanvien[]
print['Doi tuong Nhanvien co thuoc tinh tuoi khong?:', hasattr[nhanvien, 'tuoi']]
print['Doi tuong Nhanvien co thuoc tinh ten khong?:', hasattr[nhanvien, 'ten']]
print['Doi tuong Nhanvien co thuoc tinh luong khong?:', hasattr[nhanvien, 'luong']]
Doi tuong Nhanvien co thuoc tinh tuoi khong?: True
Doi tuong Nhanvien co thuoc tinh ten khong?: True
Doi tuong Nhanvien co thuoc tinh luong khong?: False
Đăng nhập
botvietbai.com cung cấp các hướng dẫn, tài liệu tham khảo và bài tập trực tuyến miễn phí bằng tất cả các ngôn ngữ chính của web. Bao gồm các chủ đề phổ biến như HTML, CSS, JavaScript, Python, SQL, Java, và nhiều hơn nữa.
Hits: 186 ❮ Chức năng tích hợp sẵn Thay đổi giá trị của thuộc tính “tuổi” của đối tượng “người”: class Person: setattr[Person, ‘age’, 40] Hãy tự mình thử » Hàm setattr[object, attribute, value] Hàm delattr [] , để xóa một thuộc tính Hàm getattr [] , để nhận giá trị của một thuộc tính Hàm hasattr [] , để kiểm tra xem một thuộc tính có tồn tại hay không ❮ Chức năng tích hợp sẵn botvietbai.comVí dụ
name = “John”
age = 36
country = “Norway”Định nghĩa và Cách sử dụng
setattr[]
đặt giá trị của thuộc tính được chỉ định của đối tượng được chỉ định.Cú pháp
Giá trị tham số
ParameterDescription object
Required. An object.
attribute
Required. The name of the attribute you want to set
value
Required. The value you want to give the specified attribute
Các trang liên quan
answer
1859
Hãy thử hasattr[]
:
if hasattr[a, 'property']:
a.property
EDIT: Xem câu trả lời của zweiterlinde dưới đây, người đưa ra lời khuyên tốt về việc yêu cầu sự tha thứ! Một cách tiếp cận rất pythonic!
Thực tiễn chung ở python là, nếu tài sản có khả năng ở đó hầu hết thời gian, chỉ cần gọi nó và để ngoại lệ lan truyền, hoặc bẫy nó bằng một khối thử / ngoại trừ.
Điều này có thể sẽ nhanh hơn hasattr
. Nếu tài sản có khả năng không ở đó hầu hết thời gian, hoặc bạn không chắc chắn, việc sử dụng hasattr
có thể sẽ nhanh hơn nhiều lần rơi vào một khối ngoại lệ.
1859 hữu ích 5 bình luận chia sẻ
answer
532
Như Jarret Hardie
đã trả lời, hasattr
sẽ thực hiện các mẹo. Tuy nhiên, tôi muốn nói thêm rằng nhiều người trong cộng đồng Python đề xuất chiến lược "dễ xin tha thứ hơn là cho phép" [EAFP] thay vì "nhìn trước khi bạn nhảy" [LBYL]. Xem các tài liệu tham khảo sau:
EAFP vs LBYL [đã được Re: Một chút thất vọng cho đến nay]
EAFP so với LBYL @Code Giống như một Pythonista: Python
thành ngữ
I E:
try:
doStuff[a.property]
except AttributeError:
otherStuff[]
... được ưu tiên để:
if hasattr[a, 'property']:
doStuff[a.property]
else:
otherStuff[]
532 hữu ích 5 bình luận chia sẻ
answer
411
Bạn có thể sử dụng hasattr[]
hoặc bắt AttributeError
, nhưng nếu bạn thực sự chỉ muốn giá trị của thuộc tính mặc định nếu nó không ở đó, thì tùy
chọn tốt nhất chỉ là sử dụng getattr[]
:
getattr[a, 'property', 'default value']
411 hữu ích 4 bình luận chia sẻ
answer
36
Tôi nghĩ những gì bạn đang tìm kiếm là hasattr . Tuy nhiên, tôi khuyên bạn nên một cái gì đó như thế này nếu bạn muốn phát hiện các thuộc tính python -
try:
getattr[someObject, 'someProperty']
except AttributeError:
print "Doesn't exist"
else
print "Exists"
Nhược điểm ở đây là lỗi thuộc tính trong __get__
mã thuộc tính cũng bị bắt.
Nếu không, làm-
if hasattr[someObject, 'someProp']:
#Access someProp/ set someProp
pass
Tài liệu:
//docs.python.org/l Library / fifts.html
Cảnh báo:
Lý do cho khuyến nghị của tôi là hasattr không phát hiện thuộc tính.
Liên kết:
//mail.python.org/pipermail/python-dev/2005-December/058498.html
36 hữu ích 3 bình luận chia sẻ
answer
28
Theo pydoc, hasattr [obj, prop] chỉ đơn giản gọi getattr [obj, prop] và bắt ngoại lệ. Vì vậy, nó chỉ hợp lệ khi bọc quyền truy cập thuộc tính bằng câu lệnh thử và bắt AttributionError vì nó sử dụng hasattr [] trước đó.
a = SomeClass[]
try:
return a.fake_prop
except AttributeError:
return default_value
28 hữu ích 2 bình luận chia sẻ
answer
20
Tôi muốn đề nghị tránh điều này:
try:
doStuff[a.property]
except AttributeError:
otherStuff[]
Người dùng @jpalecek đã đề cập đến nó: Nếu AttributeError
xảy ra
bên trong doStuff[]
, bạn sẽ bị mất.
Có lẽ cách tiếp cận này là tốt hơn:
try:
val = a.property
except AttributeError:
otherStuff[]
else:
doStuff[val]
20 hữu ích 1 bình luận chia sẻ
answer
12
Tùy thuộc vào tình huống bạn có thể kiểm tra với isinstance
loại đối tượng bạn có, và sau đó sử dụng các thuộc tính tương ứng. Với sự ra đời của
các lớp cơ sở trừu tượng trong Python 2.6 / 3.0, cách tiếp cận này cũng trở nên mạnh mẽ hơn nhiều [về cơ bản ABC cho phép cách gõ vịt tinh vi hơn].
Một tình huống này rất hữu ích nếu hai đối tượng khác nhau có một thuộc tính có cùng tên, nhưng có ý nghĩa khác nhau. Chỉ sử dụng có
hasattr
thể dẫn đến các lỗi lạ.
Một ví dụ điển hình là sự phân biệt giữa các trình vòng lặp và các vòng lặp [xem câu hỏi này ]. Các __iter__
phương thức trong một
trình vòng lặp và một vòng lặp có cùng tên nhưng về mặt ngữ nghĩa hoàn toàn khác nhau! Như vậy hasattr
là vô ích, nhưng isinstance
cùng với ABC cung cấp một giải pháp sạch.
Tuy nhiên, tôi đồng ý rằng trong hầu hết các tình huống, hasattr
cách tiếp cận [được mô tả trong các câu trả lời khác] là giải pháp phù hợp nhất.
12 hữu ích 0 bình luận chia sẻ
answer
10
Hy vọng bạn mong đợi hasattr [], nhưng cố gắng tránh hasattr [] và vui lòng thích getattr []. getattr [] nhanh hơn hasattr []
sử dụng hasattr []:
if hasattr[a, 'property']:
print a.property
tương tự ở đây tôi đang sử dụng getattr để lấy tài sản nếu không có tài sản thì nó không trả lại
property = getattr[a,"property",None]
if property:
print property
10 hữu ích 0 bình luận chia sẻ
answer
9
EDIT : Cách tiếp cận này có giới hạn nghiêm trọng. Nó sẽ hoạt động nếu đối tượng là một lần lặp . Vui lòng kiểm tra các ý kiến dưới đây.
Nếu bạn đang sử dụng Python 3.6 trở lên như tôi, có một cách thay thế thuận tiện để kiểm tra xem một đối tượng có thuộc tính cụ thể không:
if 'attr1' in obj1:
print["attr1 = {}".format[obj1["attr1"]]]
Tuy nhiên, tôi không chắc đó là cách tiếp cận tốt nhất ngay bây giờ. sử dụng
hasattr[]
, sử dụng getattr[]
hoặc sử dụng in
. Bình luận được chào đón.
9 hữu ích 3 bình luận chia sẻ
answer
0
Bạn có thể kiểm tra xem object
có chứa thuộc tính hay không bằng cách sử dụng hasattr
phương thức
dựng sẵn.
Ví dụ nếu đối tượng của bạn là a
và bạn muốn kiểm tra thuộc tínhstuff
>>> class a:
... stuff = "something"
...
>>> hasattr[a,'stuff']
True
>>> hasattr[a,'other_stuff']
False
Bản thân chữ ký phương thức hasattr[object, name] -> bool
có nghĩa là nếu object
có thuộc tính được truyền cho đối số thứ hai hasattr
hơn là mang lại boolean
True
hoặc False
theo sự hiện diện của name
thuộc tính trong đối tượng.
0 hữu ích 0 bình luận chia sẻ