از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
بررسی کنید که آیا یک شی در پایتون دارای ویژگی است یا خیر
سرفصلهای مطلب
معرفی
در پایتون، همه چیز یک شی است و هر شی دارای ویژگی هایی است. این ویژگی ها می توانند متدها، متغیرها، انواع داده ها و … باشند. اما چگونه بفهمیم یک شی چه ویژگی دارد؟
در این بایت، در مورد اهمیت بررسی ویژگیها در اشیاء پایتون و چگونگی انجام این کار بحث خواهیم کرد. ما هم لمس می کنیم روی را AttributeError
و روش رسیدگی به آن
چرا ویژگی ها را بررسی کنیم؟
ویژگیها برای اشیاء پایتون یکپارچه هستند زیرا ویژگیها و اقداماتی را که یک شی میتواند انجام دهد را تعریف میکنند. با این حال، همه اشیا دارای مجموعه ای از ویژگی ها نیستند. تلاش برای دسترسی به یک ویژگی که یک شی ندارد، یک را افزایش می دهد AttributeError
. اینجاست که بررسی یک ویژگی قبل از دسترسی به آن بسیار مهم می شود. این کمک می کند تا مطمئن شوید کد شما قوی است و کمتر مستعد خطاهای زمان اجرا است.
AttributeError در پایتون
AttributeError
یک استثنا داخلی در پایتون است که وقتی سعی میکنید به یک ویژگی دسترسی داشته باشید یا آن را فراخوانی کنید که یک شی ندارد، ایجاد میشود. در اینجا یک مثال ساده آورده شده است:
class TestClass:
def __init__(self):
self.x = 10
test_obj = TestClass()
print(test_obj.y)
کد بالا یک را افزایش می دهد AttributeError
زیرا شی test_obj
ویژگی ندارد y
. خروجی خواهد بود:
AttributeError: 'TestClass' object has no attribute 'y'
این خطا را می توان با بررسی اینکه آیا یک شی دارای ویژگی خاصی است قبل از تلاش برای دسترسی به آن جلوگیری کرد.
چگونه بررسی کنیم که آیا یک شی دارای ویژگی است یا خیر
پایتون چند راه برای بررسی اینکه آیا یک شی دارای ویژگی خاصی است ارائه می دهد. یکی از راه ها استفاده از داخلی است hasattr()
تابع، و دیگری استفاده از a try/except
مسدود کردن.
با استفاده از تابع hasattr()
ساده ترین راه برای بررسی اینکه آیا یک شی دارای ویژگی خاصی در پایتون است یا خیر، استفاده از داخلی است hasattr()
تابع. این تابع دو پارامتر را می گیرد: شی و نام مشخصه ای که می خواهید بررسی کنید (در قالب رشته) و برمی گرداند. True
اگر صفت وجود داشته باشد، False
در غیر این صورت.
در اینجا روش استفاده شما آمده است hasattr()
:
class MyClass:
def __init__(self):
self.my_attribute = 42
my_instance = MyClass()
print(hasattr(my_instance, 'my_attribute'))
print(hasattr(my_instance, 'non_existent_attribute'))
در مثال بالا، hasattr(my_instance, 'my_attribute')
برمی گرداند True
زیرا my_attribute
در واقع یک ویژگی است my_instance
. از سوی دیگر، hasattr(my_instance, 'non_existent_attribute')
برمی گرداند False
زیرا non_existent_attribute
یک ویژگی نیست my_instance
.
با استفاده از try/به جز Block
راه دیگر برای بررسی یک ویژگی استفاده از a است try/except
مسدود کردن. می توانید سعی کنید به ویژگی در داخل دسترسی پیدا کنید try
مسدود کردن. اگر ویژگی وجود نداشته باشد، پایتون یک علامت را افزایش می دهد AttributeError
که می توانید در آن بگیرید except
مسدود کردن.
در اینجا یک مثال است:
class MyClass:
def __init__(self):
self.my_attribute = 42
my_instance = MyClass()
try:
my_instance.my_attribute
print("Attribute exists!")
except AttributeError:
print("Attribute does not exist!")
در این مثال، اگر my_attribute
وجود دارد، کد در try
بلوک بدون هیچ مشکلی اجرا می شود و “ویژگی وجود دارد!” چاپ خواهد شد. اگر my_attribute
وجود ندارد، AttributeError
مطرح خواهد شد و “ویژگی وجود ندارد!” چاپ خواهد شد.
توجه داشته باشید: در حالی که این روش کار می کند، معمولاً استفاده از استثناها برای کنترل جریان در پایتون توصیه نمی شود. استثناها باید برای موارد استثنایی استفاده شوند، نه برای بررسی های مشروط منظم.
بررسی چندین ویژگی
اگر نیاز به بررسی چندین ویژگی دارید، می توانید به سادگی استفاده کنید hasattr()
چندین بار. با این حال، اگر می خواهید بررسی کنید که آیا یک شی همه یا هر یک از لیست ویژگی ها را دارد، می توانید از داخلی استفاده کنید all()
یا any()
عملکرد در ترکیب با hasattr()
.
در اینجا یک مثال است:
class MyClass:
def __init__(self):
self.attr1 = 42
self.attr2 = 'Hello'
self.attr3 = None
my_instance = MyClass()
attributes = ('attr1', 'attr2', 'attr3', 'non_existent_attribute')
print(all(hasattr(my_instance, attr) for attr in attributes))
print(any(hasattr(my_instance, attr) for attr in attributes))
در این کد، all(hasattr(my_instance, attr) for attr in attributes)
برمی گرداند False
زیرا همه صفات در لیست وجود ندارند my_instance
. با این حال، any(hasattr(my_instance, attr) for attr in attributes)
برمی گرداند True
زیرا حداقل یک ویژگی در لیست وجود دارد my_instance
.
نتیجه
در این بایت، راههای مختلفی را برای بررسی اینکه آیا یک شی دارای ویژگی خاصی در پایتون است را بررسی کردهایم. ما یاد گرفتیم که چگونه از آن استفاده کنیم hasattr()
تابع، روش استفاده از a try/except
مسدود کردن برای گرفتن AttributeError
و روش بررسی چندین ویژگی با استفاده از all()
یا any()
.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-28 16:52:06