Hướng dẫn dùng hasattr trong PHP

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.

hasattr[doituong, tenthuoctinh]

Các tham số của hàm hasattr[]:

Hàm hasattr[] có 2 tham số:

  • doituong: đối tượng bạn muốn kiểm tra
  • tenthuoctinh: tên của thuộc tính cần tìm kiếm

Lưu ý:

Hàm hasattr [] trả về:

  • TRUE nếu đối tượng có thuộc tính truyền vào.
  • FALSE nếu đối tượng không có thuộc tính truyền vào.

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']]

Chạy chương trình, kết quả trả về là:

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

  • Hàm setattr [] trong Python
      • Ví dụ
    • Định nghĩa và Cách sử dụng
    • Cú pháp
    • Giá trị tham số
    • Các trang liên quan
      • Related posts:

❮ Chức năng tích hợp sẵn

Ví dụ

Thay đổi giá trị của thuộc tính “tuổi” của đối tượng “người”:

class Person:
  name = “John”
  age = 36
  country = “Norway”

setattr[Person, ‘age’, 40]

Hãy tự mình thử »

Định nghĩa và Cách sử dụng

Hàm setattr[] đặt giá trị của thuộc tính được chỉ định của đối tượng được chỉ định.

Cú pháp

setattr[object, attribute, value]

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

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.com

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 hasattrcó 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, hasattrsẽ 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__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 AttributeErrorxả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 isinstanceloạ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ó hasattrthể 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 hasattrlà vô ích, nhưng isinstancecù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, hasattrcá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 objectcó chứa thuộc tính hay không bằng cách sử dụng hasattrphương thức dựng sẵn.

Ví dụ nếu đối tượng của bạn là avà 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] -> boolcó nghĩa là nếu objectthuộc tính được truyền cho đối số thứ hai hasattrhơn là mang lại boolean Truehoặc Falsetheo sự hiện diện của namethuộc tính trong đối tượng.

0 hữu ích 0 bình luận chia sẻ

Chủ Đề