پاسخ تمرین کلاس ژنریک در پایتون
در واقع، در این صفحه پاسخ تمرین کلاس ژنریک در پایتون را همراه با کد کامل و توضیح هر تصمیم میبینید.
| نام دوره | دوره تایپهینت در پایتون |
| درسنامه | فصل دهم: کلاسهای ژنریک |
| تمرینها | مشاهده تمرینها |
from typing import Self
class Result[T]:
def __init__(self, value: T | None, error: str | None) -> None:
self.value = value
self.error = error
@classmethod
def ok(cls, value: T) -> "Result[T]":
return cls(value, None)
@classmethod
def fail(cls, message: str) -> "Result[T]":
return cls(None, message)
def is_ok(self) -> bool:
return self.error is None
def unwrap(self) -> T:
if self.error is not None:
raise ValueError(self.error)
if self.value is None:
raise ValueError("مقداری وجود ندارد")
return self.value
def unwrap_or(self, default: T) -> T:
if self.error is not None or self.value is None:
return default
return self.value
استفاده:
def find_user(user_id: int) -> Result[dict]:
user = db.get(user_id)
if user is None:
return Result.fail(f"کاربر {user_id} یافت نشد")
return Result.ok(user)
result = find_user(42)
if result.is_ok():
print(result.unwrap()["name"])
else:
print(result.error)
name = find_user(999).unwrap_or({"name": "مهمان"})
سه نکته در این پاسخ اهمیت دارد.
خروجیِ ok و fail را "Result[T]" نوشتیم و نه Self. در این مثال Self هم کار میکرد، اما نوشتنِ نوع داخل کوتیشن صریحتر نشان میدهد که نوعِ داخلی هم حفظ میشود.
آن دو raise در unwrap عمدیاند، زیرا Result قرار است شما را وادار کند به خطا فکر کنید. اگر مستقیم unwrap را صدا بزنید و خطایی وجود داشته باشد، برنامه با استثنا متوقف میشود و همین رفتار درست است.
الگوی Result ممکن است آشنا به نظر برسد، زیرا زبانهای Rust و Swift همین را در دلِ زبان دارند. در پایتون با ژنریکها میتوانید خودتان آن را بسازید.
چگونه از پاسخ تمرین کلاس ژنریک در پایتون بیشترین بهره را ببرید
پیش از خواندن کد، خودتان یک بار تمرین را حل کنید. مطالعهی پاسخ تمرین کلاس ژنریک در پایتون وقتی اثر دارد که پیشتر خودتان تلاش کرده باشید.
- کد خودتان را با کد این صفحه خط به خط مقایسه کنید.
- هر جا تفاوتی دیدید، دلیلش را در درسنامه دوباره بخوانید.
- کد را با دستور
mypyبررسی کنید تا مطمئن شوید خطایی باقی نمانده است. - یک نسخهی دیگر از پاسخ بنویسید که همان کار را سادهتر انجام دهد.
مرجع رسمی این موضوع مستندات ماژول typing در پایتون است که همهی این ابزارها را با مثال شرح داده است.