hody.ir

دوره صفر تا صد پایتون | جلسه ۲۸ آشنایی با property و getter و setter در پایتون

29-آشنایی با property و getter و setter در پایتون

جلسه ۲۹ دوره صفر تا صد پایتون

پس از آشنایی با static class و خصوصیت private در شی گرایی در این جلسه از دوره صفر تا صد پایتون با مبحث ساده setter , getter و deleter در این جلسه آشنا می‌شویم.

آشنایی با getter , setter و deleter

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

اما با استفاده از setter و getter و deleter می‌توانیم مشخص کنیم چه زمانی می‌تواند خصوصیت هارا تغییر داد و …

یکی دیگر از قابلیت های خوب getter و setter و deleter این است که اگر فایلی یا دیتابیسی به آن خصوصیت مربوط باشد می‌توانید تمام کدها را بنویسید و پایتون اتوماتیک آنها را در زمان مشخص اجرا می‌کند.

تعریف property

قبل از استفاده از getter و setter و deleter باید با استفاده دکوراتور property خصوصیت مورد نظر را ایجاد کرد.

ابتدا در __init__ باید خصوصیت موردنظر را به شکل private تعریف کنیم ( در اینجا از خصوصیت name برای مثال استفاده می‌کنیم ):

class MyData():
    def __init__(self):
        self._name = "hody.ir"

سپس باید یک تابع با دکوراتور property با اسم خصوصیت موردنظر ایجاد کنیم:

@property
    def name(self):
        pass

این تابع getter است و زمانی فراخوانی می‌شود که مقدار خصوصیت درخواست شود. در آخر باید مقدار خصوصیت private ( در جلسه قبلی دوره صفر تا صد پایتون با این نوع خصوصیت آشنا شدیم ) را به خروجی بفرستیم. مثال:

class MyData():
    def __init__(self):
        self._name = 'hody.ir'
    @property
    def name(self):
        i = int(input('n:'))
        if i % 2 == 0:
            return self._name
        else:
            return f'https://{self._name}'

a = MyData()
print(a.name)

خروجی:

n:509
https://hody.ir

setter

تابع setter خصوصیت زمانی فراخوانی می‌شود که مقدار خصوصیت تغییر کند. برای تعریف این تابع باید به شکل زیر استفاده کرد:

class MyData():
    def __init__(self):
        self._name = 'hody.ir'
    @property
    def name(self):
        i = int(input('n:'))
        if i % 2 == 0:
            return self._name
        else:
            return f'https://{self._name}'
    @name.setter #Setter!
    def name(self,other):
        i = int(input('n:'))
        if i % 2 == 0:
            print(f"You can't change from {self._name} to {other}")
        else:
            self._name = f"https://{self._name}/{other}"
        

a = MyData()
a.name = "zero_to_hero_python"
print(a.name)

خروجی:

n:20
You can't change from hody.ir to zero_to_hero_python
n:2
hody.ir
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
n:3
n:2
https://hody.ir/zero_to_hero_python

deleter

این تابع زمانی اجرا می‌شود که از del ( در جلسات قبلی دوره صفر تا صد پایتون با del آشنا شدیم ) بر روی خصوصیت استفاده کرد. این تابع ورودی و خروجی خاصی ندارد. مثال :

class MyData():
    def __init__(self):
        self._name = 'hody.ir'
    @property
    def name(self):
        i = int(input('n:'))
        if i % 2 == 0:
            return self._name
        else:
            return f'https://{self._name}'
    @name.setter
    def name(self,other):
        i = int(input('n:'))
        if i % 2 == 0:
            print(f"You can't change from {self._name} to {other}")
        else:
            self._name = f"https://{self._name}/{other}"
    @name.deleter
    def name(self):
        del self._name
        print("Deleted")


a = MyData()
del a.name
Deleted

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

0 0 vote
Article Rating
Subscribe
اطلاع از
guest
1 دیدگاه
قدیمی ترین
جدیدترین بیشترین آرا
Inline Feedbacks
View all comments
trackback

[…] جلسات قبلی با شی گرایی در پایتون آشنا شدیم. در این جلسه از دوره صفر […]