نیم نگاهی به شی گرایی در زبان برنامه نویسی پایتون

زبان برنامه نویسی پایتون ، برنامه نویسی پایتون ، شی گرایی پایتون

در صورتی که به تازگی وارد دنیای برنامه نویسی شده باشید و یا نگاهی کوچک به زبان های برنامه نویسی انداخته باشید ، احتمالا با عبارت (( برنامه نویسی شی گرا )) یا OOP برخورد کرده اید. در این میان ، پایتون همواره از ابتدای پیدایش ، یکی از زبان های شی گرا بوده است و برنامه نویسان بسیاری  به علت وجود این ویژگی پایتون مجذوب آن شده اند. از همین رو مفهوم شی گرایی در زبان برنامه نویسی پایتون همواره از جایگاه قابل توجهی برخوردار بوده و به یکی از علت هایی تبدیل شده است که توسعه دهندگان را مجاب به یادگیری زبان برنامه نویسی پایتون کرده است . درصورتی که هنوز با این زبان آشنا نشده اید ، به شما پیشنهاد می دهیم مقاله (( پایتون چیست )) را مطالعه نموده و در ادامه با هایپر کیوسک همراه شوید تا مفاهیم ساده و ابتدایی شی گرایی پایتون را فراگیرید.

 

شی گرایی در پایتون چیست ؟

 

برنامه نویسی شی گرا (( Object Oriented Programming )) یا به اختصار (( OOP )) در واقع نوعی الگو می باشد که از زندگی انسان برگرفته شده است . در این مفهوم تلاش ما بر آن است که مفاهیم برنامه نویسی را همانند اشیا موجود در این جهان ، به مدل تبدیل کنیم . این مهم ، نوعی شیوه در برنامه نویسی می باشد که در آن طراحی نرم افزار به جای توابع و منطق ، حول محور اشیا و داده می چرخد. این ویژگی سبب ساده تر شدن هر چه بیشتر کد نویسی ، در پروژه های بسیار بزرگ می شود و علاوه بر آن  سبب منظم شدن کدها و افزایش خوانایی می شود. اساس آموزش پایتون و اصول این زبان ، شی گرایی می باشد و در آن هرکدام از داده ها ، یک شی تلقی می شوند. در ادامه بیشتر با این مفاهیم آشنا خواهیم شد.

زبان برنامه نویسی پایتون ، پایتون ، شی گرایی پایتون

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

کلاس (( Class )) در واقع همان الگو (( Pattern )) برای شی می باشد. به عبارت دیگر با تعریف شکل و چگونگی کلاس ، ساختار شی ، مشخص می شود. کلاس ها نمونه اولیه ی مجموعه ای از اشیا می  باشد که صفاتی چون نام ، رنگ ، اندازه و موارد دیگر را تعریف می کند .با استفاده از کلمه اصلی (( class )) ، نام آن ، علامت : و سپس با indent ، اعضای کلاس تعریف می شوند.

class <Class Name>:

    <statement1>

    <statement2>

    .

    .

    <statement>

 

مثال :

 

# Python program to

# demonstrate defining

# a class

class Dog:

    pass

اشیا (( objects )) 

شی یک‌ نمونه از یک کلاس است . در زبان برنامه نویسی پایتون  ، شی گرایی را متشکل از سه قسمت ، تعریف می نمایند :

۱. حالت (( state )) : صفت هایی که نشانگر خصوصیات آن ها می باشند.

۲. رفتار (( behavior )) : شامل کارهایی می باشد  که شی انجام می دهد.

۳. هویت (( identity )) : با دادن یک نام منحصر به فرد به شی ، سبب تعامل آن با دیگر اشیا می شود.

ایجاد شی 

برای ساخت کلاس ، توصیف شی تعریف می شود و کافیست نام شی مورد نظر را نوشته و کلاس مربوطه را به آن اختصاص دهیم. توصیه میکنیم یادگیری مفهوم شی گرایی را درزبان برنامه نویسی پایتون در اولویت قرار دهید.

 

# Python program to

# demonstrate instantiating

# a class

 

class Dog:

    # A simple class

 

    # attribute

    attr1 = “Rex”

    attr2 = “dog”

 

    # A sample method

    def fun(self):

        print(“I’m a”, self.attr1)

        print(“I’m a”, self.attr2)

 

    # Driver code

 

# Object instantiation

Rodger = Dog()

 

# Accessing class attributes

# and method through objects

print(Rodger.attr1)

Rodger.fun()

 

در نتیجه خروجی آن بدین صورت می شود

 

Rex

 

I’m a Rex

 

I’m a dog

متد ها

متدها در واقع همان توابعی می باشند که درون بدنه یک کلاس تعریف می شوند. به بیانی دیگر ، رفتار یک شی را نشان می دهند.  زبان برنامه نویسی پایتون ، به متد ها اهمیت دوچندان میدهد.

مثال 

class Parrot:

   

    # instance attributes

    def __init__(self, name, age):

        self.name = name

        self.age = age

   

    # instance method

    def sing(self, song):

        return “{} sings {}”.format(self.name, song)

 

    def dance(self):

        return “{} is now dancing”.format(self.name)

 

# instantiate the object

blu = Parrot(“Blu”, 10)

 

# call our instance methods

print(blu.sing(“‘Happy'”))

print(blu.dance())

 

با اجرای برنامه ، خروجی به صورت زیر خواهد بود 

 

Blu sings ‘Happy’

Blu is now dancing

تابع __init__

تمامی کلاس ها تابعی به نام ()__init__ دارند که همیشه برای ایجاد شی ، فراخوانی شده و به صورت خودکار اجرا می شود. با استفاده از زبان برنامه نویسی پایتون ،  می توانید از این تابع برای مقدار اولیه به خواص شی دیگر اعمال استفاده کنید.

# A Sample class with init method

class Person:

# init method or constructor
def __init__(self, name):
self.name = name

# Sample Method
def say_hi(self):
print(‘Hello, my name is’, self.name)

p = Person(‘Nikhil’)
p.say_hi()

خروجی :

Hello, my name is Nikhil

 

زبان برنامه نویسی پایتون ، پایتون ، شی گرایی آموزش پایتون

پارامتر سلف (( self )) در  زبان برنامه نویسی پایتون 

زبان برنامه نویسی پایتون به ما می گوید که برای متدهای کلاس ، لازم است یک پارامتر اول اضافی تعریف گردد و در هنگام تعریف ، خود  پایتون آن را شناسایی کند. در خصوص متغیر ها ، در آموزش پایتون این مجموعه متوجه‌ می شوید که این زبان در واقع چیزی به نام اعضای خصوصی ندارد. در عوض بر توافق جمعی تکیه دارد و این متغیر ها صرفا تابع هایی هستند که از خارج از کلاس قابل دسترسی نیستند. اما در زبان برنامه نویسی پایتون با مسئولیت خودتان امکان ویرایش آنها را به شما میدهد چرا که ممکن است به درستی عمل نکنند.

متغیرهای نمونه (( Instance Variables )) : متغیرهایی که مختص نمونه ایجاد شده از کلاس هستند و در زبان برنامه نویسی پایتون امکان استفاده از آن ها برای شما فراهم می شود.
متغیرهای کلاس (( Class variables )) : در تمامی اشیا مشترک بوده و به ندرت استفاده می گردند.

در کد مقابل ، تعریف متغیر نمونه توسط متد سازنده کلاس را می بینید :

# Python program to show that the variables with a value

# assigned in the class declaration, are class variables and

# variables inside methods and constructors are instance

# variables.

 

# Class for Dog

class Dog:

 

    # Class Variable

    animal = ‘dog’

 

    # The init method or constructor

    def __init__(self, breed, color):

        # Instance Variable

        self.breed = breed

        self.color = color

 

# Objects of Dog class

Rodger = Dog(“Pug”, “brown”)

Buzo = Dog(“Bulldog”, “black”)

 

print(‘Rodger details:’)

print(‘Rodger is a’, Rodger.animal)

print(‘Breed: ‘, Rodger.breed)

print(‘Color: ‘, Rodger.color)

print(‘\nBuzo details:’)

print(‘Buzo is a’, Buzo.animal)

print(‘Breed: ‘, Buzo.breed)

print(‘Color: ‘, Buzo.color)

 

# Class variables can be accessed using class

# name also

print(“\nAccessing class variable using class name”)

print(Dog.animal)

 

خروجی :

Rodger details:

Rodger is a dog

Breed:  Pug

Color:  brown

Buzo details:

Buzo is a dog

Breed:  Bulldog

Color:  black

Accessing class variable using class name

dog

 

تعریف متغیر نمونه در سایر متد کلاس

 

# Python program to show that we can create

# instance variables inside methods

# Class for Dog

class Dog:

    # Class Variable

    animal = ‘dog’

 # The init method or constructor

    def __init__(self, breed):

        # Instance Variable

        self.breed = breed

# Adds an instance variable

    def setColor(self, color):

        self.color = color

# Retrieves instance variable

    def getColor(self):

        return self.color

# Driver Code

Rodger = Dog(“pug”)

Rodger.setColor(“brown”)

print(Rodger.getColor())

خروجی

 

Brown

زبان برنامه نویسی پایتون ، پایتون ، آموزش پایتون شی گرا

زبان برنامه نویسی پایتون شی گرا و وراثت یا ارث بری 

وراثت راهکاری برای ساخت یک کلاس جدید است که درزبان برنامه نویسی پایتون   متوجه خواهید شد که در آن می توانید از جزییات موجود در یک کلاس بدون نیاز به ویرایش آن استفاده کنید. وراثت قابلیت استفاده مجدد کد ها را فراهم نموده و از تکرار کدهای مشابه جلوگیری می کند. علاوه بر آن ماهیت انتقالی آن سبب تمایز پایتون و به تبع ،  ضرورت آموزش زبان برنامه نویسی پایتون  شی گرا می شود .

یک مثال ساده :

 

# A Python program to demonstrate inheritance

# Base or Super class. Note object in bracket.

# (Generally, object is made ancestor of all classes)

# In Python 3.x “class Person” is

# equivalent to “class Person(object)”

class Person(object):

    # Constructor

    def __init__(self, name):

        self.name = name

    # To get name

    def getName(self):

        return self.name

   # To check if this person is an employee

    def isEmployee(self):

        return False

 # Inherited or Subclass (Note Person in bracket)

class Employee(Person):

    # Here we return true

    def isEmployee(self):

        return True

# Driver code

emp = Person(“Geek1”)  # An Object of Person

print(emp.getName(), emp.isEmployee())

emp = Employee(“Geek2”) # An Object of Employee

print(emp.getName(), emp.isEmployee())

 

خروجی


Geek1 False
Geek 2 True

انواع وراثت 

۱.وراثت منفرد : وقتی کلاس فرزند فقط از یک کلاس پدر ارث ببرد.
۲. وراثت چندگانه : وقتی کلاس فرزند از کلاس های پدر متعددی ارث بری کند .

برخلاف سایز زبان ها ، پایتون قابلیت وراثت چندگانه را داراست که در  زبان برنامه نویسی پایتون اشاره شده است .

مثال :

 

# Python example to show the working of multiple

# inheritance

 

class Base1(object):

    def __init__(self):

        self.str1 = “Geek1”

        print(“Base1”)

 

class Base2(object):

    def __init__(self):

        self.str2 = “Geek2”

        print(“Base2”)

 

class Derived(Base1, Base2):

    def __init__(self):

        # Calling constructors of Base1

        # and Base2 classes

        Base1.__init__(self)

        Base2.__init__(self)

        print(“Derived”)

 

    def printStrs(self):

        print(self.str1, self.str2)

 

ob = Derived()

ob.printStrs()

خروجی

 

Base 1

Base 2

Derived

Geek 1 Geek 2

۳. وراثت چند سطحی درزبان برنامه نویسی پایتون   : در صورت وجود نوه ، رابطه فرزند و نوع این وراثت را به وجود می آورد.

# A Python program to demonstrate inheritance

# Base or Super class. Note object in bracket.

# (Generally, object is made ancestor of all classes)

# In Python 3.x “class Person” is

# equivalent to “class Person(object)”

 

class Base(object):

    # Constructor

    def __init__(self, name):

        self.name = name

 

    # To get name

    def getName(self):

        return self.name

 

# Inherited or Sub class (Note Person in bracket)

class Child(Base):

    # Constructor

    def __init__(self, name, age):

        Base.__init__(self, name)

        self.age = age

 

    # To get name

    def getAge(self):

        return self.age

 

# Inherited or Sub class (Note Person in bracket)

class GrandChild(Child):

    # Constructor

    def __init__(self, name, age, address):

        Child.__init__(self, name, age)

        self.address = address

 

    # To get address

    def getAddress(self):

        return self.address

 

# Driver code

g = GrandChild(“Geek1”, 23, “Noida”)

print(g.getName(), g.getAge(), g.getAddress())

خروجی

Geek 1 23 Noida

۴. ارث بری سلسله مراتبی : که شامل ارث بری یک کلاس از بیش از یک کلاس پدر است .
۵. ارث بری ترکیبی : از انواع وراث تشکیل می شود که در شی گرایی زبان برنامه نویسی پایتون به شکل کامل تری به آن خواهیم پرداخت.
زبان برنامه نویسی پایتون ، پایتون ، آموزش پایتون شی گرا

زبان برنامه نویسی پایتون  و مفهوم کپسوله سازی (( Encapsulation ))

از مهم ترین مفاهیم موجود در  زبان برنامه نویسی پایتون ، می توان به کپسوله سازی اشاره نمود. این مهم برای بسته بندی داده ها و متدهایی می باشد که در یک واحد عمل می کنند. با استفاده از آن می توان دسترسی به متدها و متغیر هارا محدود نمود و ویرایش مستقیم داده ها را محدود کرد.

اعضای خصوصی (( private members ))

این اعضا تنها درون کلاس خود قابل دسترسی می باشند و در خارج از کلاس قابل دسترسی نیستند. در  زبان برنامه نویسی پایتون متوجه شدیم که برای تعریف این اعضا از”__” استفاده می کنیم .

مثال :

 

# Python program to

# demonstrate private members

# Creating a Base class

 

class Base:

    def __init__(self):

        self.a = “hyperkiosk.ir”

        self.__c = “hyperkiosk.ir”

 

# Creating a derived class

class Derived(Base):

    def __init__(self):

        # Calling constructor of

        # Base class

        Base.__init__(self)

        print(“Calling private member of base class: “)

        print(self.__c)

 

# Driver code

obj1 = Base()

print(obj1.a)

# Uncommenting print(obj1.c) will

# raise an AttributeError

# Uncommenting obj2 = Derived() will

# also raise an AttributeError as

# private member of base class

# is called inside derived class

و‌در نهایت خروجی

Hyperkiosk.ir

Traceback (most recent call last):

File “/home/f4905b43bfcf29567e360c709d3c52bd.py”, line 25, in

print(obj1.c)

AttributeError: ‘Base’ object has no attribute ‘c’

Traceback (most recent call last):

File “/home/4d97a4efe3ea68e55f48f1e7c7ed39cf.py”, line 27, in

obj2 = Derived()

File “/home/4d97a4efe3ea68e55f48f1e7c7ed39cf.py”, line 20, in __init__

print(self.__c)

AttributeError: ‘Derived’ object has no attribute ‘_Derived__c’

لازم به ذکر است متد “__init__” سازنده است و با ایجاد یک شی اجرا می شود.

 

اعضای محافظت شده (( Protected member ))

همانند اعضای خصوصی می باشند که خارج از کلاس قابل دسترسی نیستند اما برخلاف آن ها از داخل کلاس و زیر کلاس های آن ها قابل دسترسی هستند. برای آن ها می بایست قبل از نام عضو، “_” قرار داد.

مثال :

 

# Python program to
# demonstrate protected members
# Creating a base class

class Base:
def __init__(self):
# Protected member
self._a = 2

# Creating a derived class
class Derived(Base):
def __init__(self):
# Calling constructor of
# Base class
Base.__init__(self)
print(“Calling protected member of base class: “)
print(self._a)

obj1 = Derived()
obj2 = Base()
# Calling protected member
# Outside class will result in
# AttributeError
print(obj2.a)

 

خروجی

Calling protected member of base class:

2

Traceback (most recent call last):

File “/home/6fb1b95dfba0e198298f9dd02469eb4a.py”, line 25, in

print(obj1.a)

AttributeError: ‘Base’ object has no attribute ‘a’

چند ریختی یا Polymorphism

 

از این قابلیت برای استفاده از رابط متداول به شکل های مختلف داده می باشد . به عنوان مثال برای رنگ کردن یک شکل شامل انتخاب هایی نظیر مربع ، مستطیل ، دایره .

مثالی از توابع چند ریختی ساخته شده :

# Python program to demonstrate in-built poly-

# morphic functions

# len() being used for a string

print(len(“hyperkiosk”))

# len() being used for a list

print(len([10, 20, 30]))

خروجی

 

 

6

 

3

مثالی از توابع چند ریختی تعریف شده :

 

 

# A simple Python function to demonstrate

# Polymorphism

 

def add(x, y, z = 0):

    return x + y+z

 

# Driver code

print(add(2, 3))

print(add(2, 3, 4))

 

خروجی

 

 

5

9

در نهایت چند ریختی با متد های کلاس 

در زبان برنامه نویسی پایتون می بینید که چگونه کد مقابل ، از دو کلاس متفاوت به یک شیوه استفاده می کند.

class India():

    def capital(self):

        print(“New Delhi is the capital of India.”)

 

    def language(self):

        print(“Hindi is the most widely spoken language of India.”)

 

    def type(self):

        print(“India is a developing country.”)

 

class USA():

    def capital(self):

        print(“Washington, D.C. is the capital of USA.”)

 

    def language(self):

        print(“English is the primary language of USA.”)

 

    def type(self):

        print(“USA is a developed country.”)

 

obj_ind = India()

obj_usa = USA()

 

for country in (obj_ind, obj_usa):

    country.capital()

    country.language()

    country.type()

 

خروجی

 

 

New Delhi is the capital of India.

 

Hindi is the most widely spoken language of India.

 

India is a developing country.

 

Washington, D.C. is the capital of USA.

 

English is the primary language of USA.

 

The USA is a developed country.

زبان برنامه نویسی پایتون پایتون ، پایتون ، آموزش پایتون شی گرایی

جمع بندی  

در این مقاله از هایپر کیوسک ، با کاربرد و‌ مفهوم شی گرایی در پایتون و به تبع ، زبان برنامه نویسی پایتون آشنا شدید. ابتدا به بررسی خود مفهوم شی گرایی و ایده پیدایش آن پرداختیم و پس از آن با مفاهیم پایه ای شی گرایی آموزش  پایتون یعنی کلاس و شی آشنا شدیم. پس از آن به اهمیت  زبان برنامه نویسی پایتون و انواع متدهای سازنده و متغیرهای متفاوت به همراه کاربرد آن ها آشنا شدیم. در نهایت هم کپسوله سازی و وراثت را به شکلی ابتدایی تعریف کردیم. به طور کلی برنامه نویسی با‌ استفاده از پارادایم شی گرا ، آسان ، موثر ، کارا و امن و مطمئن شده است . البته ذکر این موضوع خالی از لطف نیست که مبحث شی گرایی درزبان برنامه نویسی پایتون بسیار گسترده تر از چیزیست که در اینجا برای شما فراهم گردیده است . در صورتی که به یادگیری بیشتر و زبان برنامه نویسی پایتون علاقه دارید ، می توانید با شرکت در ((  دوره آموزش پایتون ))  هایپر کیوسک ، این زبان برنامه نویسی بسیار جذاب و کاربردی را فرا گیرید و به درآمد فوق العاده برسید.

درباره‌ی میثم وحدتی نیا

میثم وحدتی نیا

همچنین ببینید

آموزش برنامه نویسی پایتون

راهنمای بازارکار و درآمد آموزش برنامه نویسی پایتون (( ۲۰۲۱ ))

در عصر امروز ، پیشرفت تکنولوژی سبب گرایش و میل بیشتر افراد به یادگیری برنامه …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

14 + نه =