codingcogs' logo

کلاس‌(Class) و آبجکت‌ (Object)

مبنای اصلی object-oriented programming در تمام زبان‌های برنامه‌نویسی classها هستند. یک class صرفا یک قالب ( template ) برای ساخت object هاست. classها ویژگی‌های ( properties ) مختلف object را تعریف می‌کنند و مشخص می‌کنند که چه کارهایی را می‌توان با object انجام داد. مثلا datetime را که در فصل 3و 4 دیدیم، یک class است که زمان ( date + time ) را به صورت یک object باز می‌گرداند. بیاید یک object از یک کلاس دیگر را که قبلا بارها استفاده کرده‌ایم را بررسی کنیم:

x = 10
x
# 10

بیایید با تابع type نوع متغیر x را ببینیم:

type(x)
# <class 'int'>

می‌بینید که x از نوع class int است. این class فقط برای ذخیره‌ی عدد استفاده نمی‌شود و الان object ما یعنی x چندین ویژگی ( property ) نیز دارد. مثلا:

x.bit_length()
# 4

متد bit_length تعداد digitهای باینری ( binary یا مبنای 2 یا دو دویی) x یعنی تعداد ارقام 1010 را باز می‌گرداند.

کد مشاهده‌ی docstring این class را نیز ببینید:

print(x.__doc__)

که در خروجی داریم:

int([x]) -> integer
int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments
are given.  If x is a number, return x.__int__().  For floating-point
numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string,
bytes, or bytearray instance representing an integer literal in the
given base.  The literal can be preceded by '+' or '-' and be surrounded
by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36.
Base 0 means to interpret the base from the string as an integer literal.
>>> int('0b100', base=0)
4

حتی ساده‌ترین objectها در Python نیز propertyها و methodهای جالب و زیادی دارند که با استفاده از آن‌ها می‌توانیم به اطلاعات بیشتری در مورد آن‌ها دست پیدا کنیم یا روی آن‌ها عملیات و محاسبات ( پردازش یا computation ) انجام دهیم. وقتی قصد تغییر و توسعه‌ی رفتارها، propertyها و methodهای objectها را داشته باشیم، باید classهای خودمان را برای این کار بنویسیم. پایه‌ی داستان ما در مورد OOP از اینجا شروع می‌شود!