این ویدیو در ادامه مبحث آموزش شی گرایی در پایتون قرار دارد. در ویدیوهای قبل در مورد ایجاد کلاس و ساخت متد در پایتون صحبت شده است. همچنین در ویدیوهای بعدی در رابطه با توضیح class method و static method و وراثت در شی گرایی پایتون گفته شده است.
در شی گرایی پایتون دو نوع متغیر وجود دارد. class variable یا متغیرهای کلاسی به نوعی از متغیرها گفته میشود که مقدار آن در تمام آبجکت های ساخته شده از کلاس یکسان است. اما instance variable یا متغیرهای آبجکتی به نوعی گفته میشود که مقدار آن مختص همان آبجکت است و بقیه آبجکت ها به آن دسترسی ندارند.
هنگامی که انتظار داریم متغیرها در آبجکتها ثابت باشند، یا زمانی که می خواهیم یک متغیر را راه اندازی کنیم، می توانیم آن متغیر را در سطح کلاس تعریف کنیم. وقتی پیش بینی می کنیم که متغیرها در موارد مختلف به طور قابل توجهی تغییر خواهند کرد ، می توانیم آنها را در سطح آبجکت تعریف کنیم.
این آموزش استفاده از متغیرهای کلاس و آبجکت در برنامه نویسی شی گرا در پایتون را نشان می دهد.
متغیرهای کلاسی - Class Variables
متغیرهای کلاس در ساختار کلاس تعریف می شوند. از آنجا که متعلق به خود کلاس است ، متغیرهای کلاس در تمام آبجکتهای کلاس به اشتراک گذاشته می شود. بنابراین آنها به طور کلی برای هر آبجکت یک مقدار خواهند داشت مگر اینکه از متغیر کلاس برای راه اندازی اولیه یک متغیر استفاده کنید.
خارج از همه متدها ، متغیرهای کلاس ، طبق قرارداد ، معمولاً درست زیر کلاس و قبل از متد سازنده و سایر متدها قرار می گیرند.
یک متغیر کلاس به تنهایی شبیه شکل زیر است:
class Shark:
animal_type = "fish"
در اینجا به متغیر animal_type مقدار "fish" اختصاص داده شده است.
ما می توانیم یک نمونه از کلاس Shark ایجاد کنیم (ما آن را new_shark می نامیم) و متغیر را با استفاده از نماد نقطه چاپ کنیم:
class Shark:
animal_type = "fish"
new_shark = Shark()
print(new_shark.animal_type)
بیایید برنامه را اجرا کنیم:
python shark.py
# OUTPUT
fish
برنامه ما مقدار متغیر را برمی گرداند.
بیایید چند متغیر کلاس دیگر اضافه کرده و آنها را چاپ کنیم:
class Shark:
animal_type = "fish"
location = "ocean"
followers = 5
new_shark = Shark()
print(new_shark.animal_type)
print(new_shark.location)
print(new_shark.followers)
درست مانند هر متغیر دیگری ، متغیرهای کلاس می توانند شامل هر نوع داده ای باشند که در پایتون در دسترس ما است. در این برنامه ما رشته ها و یک عدد صحیح داریم. بیایید برنامه را دوباره با دستور python shark.py اجرا کرده و خروجی را مرور کنیم:
fish
ocean
5
نمونه new_shark قادر است به همه متغیرهای کلاس دسترسی داشته باشد و هنگام اجرای برنامه آنها را چاپ کند.
متغیرهای کلاس به ما امکان می دهد تا متغیرها را بر اساس ساخت کلاس تعریف کنیم. سپس این متغیرها و مقادیر مرتبط با آنها برای هر نمونه از کلاس قابل دسترسی است.
متغیرهای آبجکت - Instance Variables
متغیرهای آبجکت متعلق به آبجکتهای کلاس هستند. این بدان معناست که برای هر شیء یا نمونه از یک کلاس، آبجکتهای نمونه متفاوت هستند.
برخلاف متغیرهای کلاس ، متغیرهای آبجکت در متدها تعریف می شوند.
در مثال کلاس Shark در زیر، name و age متغیرهای آبجکت هستند:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
هنگامی که یک شی Shark ایجاد می کنیم، باید این متغیرها را که به عنوان پارامترها در متد سازنده یا متدی دیگر ارسال می شوند ، تعریف کنیم.
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
مانند متغیرهای کلاس ، ما می توانیم متغیرهای آبجکت را به صورت مشابه فراخوانی کنیم:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)
وقتی برنامه بالا را با python shark.py اجرا می کنیم، خروجی زیر را دریافت می کنیم:
Sammy
5
خروجی دریافتی ما از مقادیر متغیرهایی که برای نمونه شی new_shark مقداردهی کردیم ، تشکیل شده است.
بیایید یک شیء دیگر از کلاس Shark به نام stevie ایجاد کنیم:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)
stevie = Shark("Stevie", 8)
print(stevie.name)
print(stevie.age)
# OUTPUT
Sammy
5
Stevie
8
شیء stevie ، مانند شی new_shark ، پارامترهای خاص آن آبجکت از کلاس Shark را برای تعیین مقادیر به متغیرهای آبجکت ارسال می کند.
متغیرهای آبجکت، متعلق به آبجکت کلاس، به هر شی یا نمونه اجازه می دهد که مقادیر متفاوتی به آن متغیرها اختصاص داده شود.
کار با instance variable و class variable در کنار یکدیگر
متغیرهای کلاس و متغیرهای آبجکت اغلب به طور همزمان استفاده می شوند، بنابراین بیایید با استفاده از کلاس Shark که ایجاد کرده ایم به نمونه ای از آن نگاه کنیم. کامنتهای موجود در برنامه هر مرحله از فرآیند را نشان می دهد.
class Shark:
# Class variables
animal_type = "fish"
location = "ocean"
# Constructor method with instance variables name and age
def __init__(self, name, age):
self.name = name
self.age = age
# Method with instance variable followers
def set_followers(self, followers):
print("This user has " + str(followers) + " followers")
def main():
# First object, set up instance variables of constructor method
sammy = Shark("Sammy", 5)
# Print out instance variable name
print(sammy.name)
# Print out class variable location
print(sammy.location)
# Second object
stevie = Shark("Stevie", 8)
# Print out instance variable name
print(stevie.name)
# Use set_followers method and pass followers instance variable
stevie.set_followers(77)
# Print out class variable animal_type
print(stevie.animal_type)
if __name__ == "__main__":
main()
وقتی برنامه را با python shark.py اجرا می کنیم ، خروجی زیر را دریافت می کنیم:
# Output
Sammy
ocean
Stevie
This user has 77 followers
fish
در اینجا ، ما از متغیرهای کلاس و آبجکت در دو شیء از کلاس Shark، در sammy و stevie استفاده کرده ایم.
در برنامه نویسی شی گرا ، متغیرهای سطح کلاس را class variable می نامند ، در حالی که متغیرهای سطح شی را instance variable می نامند.
ارسال نظر