ویدیو آموزش ارثبری از آبجکت های داخلی(built-in) پایتون
زمانی که در حال کدنویسی پایتون هستند ممکن است نیاز به ساخت کلاس هایی داشته باشید که همانند آبجکت های داخلی پایتون رفتار میکنند. مثلا نیاز به کلاسی دارید که مثل لیست های پایتون کار میکند. به جای اینکه وقت خود را روی پیاده سازی همچین کلاسی هدر دهید میتوانید از آبجکت های داخلی پایتون ارثبری کنید.
به راحتی میتوانید تمام ویژگی های آبجکت های داخلی پایتون را به ارث برده و فقط رفتارهایی که میخواهید را تغییر دهید. اما قبل از اینکار به دو نکته مهم دقت کنید:
- برای ارثبری از آبجکت های داخلی پایتون باید کاملا با آن آبجکت آشنا باشید و رفتارهای آن را بشناسید.
- حتما برای کدهایتان unittest بنویسید زیرا تغییر رفتار آبجکت های داخلی پایتون میتوانید باعث اشکالات فراوانی شود.
در پایتون آبجکت های مختلفی وجود دارد که میتوانید از آنها استفاده کنید. در پایین لیست این آبجکت ها آمده است:
Python Built-in Types:
Truth Value Testing
Boolean Operations - and, or, not
Comparisons
Numeric Types - int, float, complex
Iterator Types
Sequence Types - list, tuple, range
Text Sequence Type - str
Binary Sequence Types - bytes, bytearray, memoryview
Set Types - set, frozenset
Mapping Types - dict
Context Manager Types
Other Built-in Types
Special Attributes
# ارث بری از آبجکت list
برای درک بهتر این موضوع از یک مثال استفاده میکنیم. قرار است کلاسی بسازیم که دقیقا مثل لیست ها عمل میکند با این تفاوت که فقط توانایی ذخیره رشته را داشته باشد.
ابتدا یک کلاس به نام StringList ایجاد کرده و این کلاس از آبجکت داخلی list ارثبری میکند:
class StringList(list):
pass
حالا کلاس ما به تمام ویژگی ها و رفتارهای کلاس list پایتون دسترسی دارد و میتواند همانند لیست های پایتون در خود آیتم ذخیره کند:
a = StringList()
a.append('a')
a.append('b')
print(a)
# OUTPUT
['a', 'b']
در این مرحله باید در کلاس StringList متد append را بازنویسی کنیم تا فقط اجازه ذخیره رشته ها را بدهیم و اگر کاربر سعی در ذخیره داده های دیگر مانند عدد کرد با خطا مواجه شود:
class StringList(list):
def append(self, element):
if not isinstance(element, str):
raise TypeError('This list only accepts strings.')
return super().append(element)
حالا اگر کاربر بخواهد عدد را با کلاس ما ذخیره کند با پیغام خطا موجه خواهد شد:
a = StringList()
a.append('a')
a.append(12)
print(a)
# OUTPUT
Traceback (most recent call last):
File "/home/amir/Desktop/python/two.py", line 16, in <module>
a.append(12)
File "/home/amir/Desktop/python/two.py", line 8, in append
raise TypeError('This list only accepts strings.')
TypeError: This list only accepts strings.
ارسال نظر