توضیح دکوراتور property در پایتون

May 2022


# دکوراتور property پایتون چیست؟

با استفاده از دکوراتور property میتونید کاری کنید که متدهاتون به شکل property قابل دسترسی باشن. یعنی بدون نیاز به پرانتز بتونید متدهاتون رو صدا بزنید. شما میتوانید از دکوراتور property پایتون برای مشخص کردن setter و deleter نیز استفاده کنید.

 

در زیر متد name به عنوان یک property اعلام می شود. این متد باید مقدار ویژگی را برگرداند.

class Student:

    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name

 

در بالا، دکوراتور @property  روی متد name() اعمال شد. متد name() مقدار ویژگی name__ را برمی‌گرداند. بنابراین، اکنون می‌توانیم از متد name() به عنوان property برای بدست آوردن مقدار ویژگی __name استفاده کنیم، همانطور که در زیر نشان داده شده است.

>>> s = Student('Steve')
>>> s.name 
'Steve'

 

 

# دکوراتور property.setter پایتون

در بالا، متد name() را به عنوان یک property تعریف کردیم. ما فقط می توانیم به مقدار ویژگی name دسترسی داشته باشیم اما نمی توانیم آن را تغییر دهیم. برای تغییر مقدار ویژگی، باید متد setter را برای ویژگی name با استفاده از دکوراتور @property-name.setter  تعریف کنیم، همانطور که در زیر نشان داده شده است.

class Student:

    def __init__(self, name):
        self.__name=name

    @property
    def name(self):
        return self.__name

    @name.setter   #property-name.setter decorator
    def name(self, value):
        self.__name = value

 

در بالا، دو متد name() داریم. یکی برای گیرنده و دیگری برای تغییر است. متد setter باید دارای آرگومان value باشد که بتوان از آن برای تخصیص ویژگی خصوصی زیرین استفاده کرد. اکنون می‌توانیم مقدار ویژگی را بازیابی و تغییر دهیم، همانطور که در زیر نشان داده شده است.

>>> s = Student('Steve')
>>> s.name 
'Steve'
>>> s.name = 'Bill'
'Bill'

 

 

# دکوراتور property.deleter پایتون

از دکوراتور property-name.deleter@ برای حذف یک ویژگی استفاده میشود. به مثال زیر دقت کنید:

class Student:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name
    
    @name.setter
    def name(self, value):
        self.__name=value
    
    @name.deleter   #property-name.deleter decorator
    def name(self, value):
        print('Deleting..')
        del self.__name

 

دکوراتور property-name.deleter@ زمانی فعال خواهد شد که یخواهید یک ویژگی را با کلمه del حذف کنید. به محض اینکه یک ویژگی را حذف کردید، دیگر نمیتوانید به آن دسترسی داشته باشید:

>>> s = Student('Steve')
>>> del s.name 
Deleting.. 
>>> s.name 
Traceback (most recent call last):                              
File "<pyshell#16>", line 1, in <module>            
    p.name                                                      
File "C:\Python37\test.py", line 6, in name                     
    return self.__name                                          
AttributeError: 'Student' object has no attribute '_Student__name'

 


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

ارسال نظر

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

پدرام

April 2022

حرف نداری. جزو بهترین‌هایی واقعا.

ارسال نظر


ناشناس

March 2022

عالی توضیح میدی انصافا- دمت گرم

ارسال نظر