آموزش class و instance variable در پایتون

May 2022


این ویدیو در ادامه مبحث آموزش شی گرایی در پایتون قرار دارد. در ویدیوهای قبل در مورد ایجاد کلاس و ساخت متد در پایتون صحبت شده است. همچنین در ویدیوهای بعدی در رابطه با توضیح 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 می نامند.

 

 


5:47:36


0

Intro

10:38

رایگان

1

Variable

12:30

رایگان

2

String

19:22

رایگان

3

List

8:46

رایگان

4

While

9:6

رایگان

5

If

8:37

رایگان

6

For

6:12

رایگان

7

range

4:17

رایگان

8

break, continue, pass

9:15

رایگان

9

Function

12:32

رایگان

10

List methods

12:11

رایگان

11

Tuple

8:29

رایگان

12

Set

7:47

رایگان

13

Dictionary

9:19

رایگان

14

Module

10:40

رایگان

15

fstring

5:35

رایگان

16

format

7:34

رایگان

17

File

17:14

رایگان

18

Scope

6:25

رایگان

19

OOP

12:15

رایگان

20

Method

20:19

رایگان

21

class/instance variable

14:7

رایگان

22

class/static method

13:25

رایگان

23

Inheritance

17:6

رایگان

24

Special methods

9:50

رایگان

25

Access points

11:12

رایگان

26

property

6:54

رایگان

27

Exceptions

21:17

رایگان

28

Standard library

12:51

رایگان

29

Docstring

10:49

رایگان

30

Virtualenv

11:2

رایگان


دوره‌های پیشنهادی

دوره اول آموزش جنگو(django)

دوره اول آموزش جنگو(django)

دوره آموزش GraphQL در پایتون

دوره آموزش GraphQL در پایتون

دوره آموزش Celery

دوره آموزش Celery

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

amir2001

March 2022

اقا دمتون گرم من از 3 جا شی گرایی رو دیدم نفهمیدم (جادی رو هم دیده بودم ) اما اینجا رو دیدم فهمیدم .
دمممممممممممممممممممممممممممممممممت گررررررررررررررم

ارسال نظر


مینا

December 2021

عالی خسته نباشید
توضیحات بسیار کامل و گیرا بود

ارسال نظر


مهدی

February 2021

خیلی ممنون از شما

ارسال نظر


MORTEZA

January 2021

خیلی ممنون کامل و گیرا بود مخصوصا class variables

ارسال نظر