PYTHONLEARNME Telegram 268
سلام دوستان امروز می خواهیم درباره ی dunder new صحبت کنیم ، dunder new یک special method (یک class method هم هست پس اولین مقدارش خود کلاسه)

در پایتون هست که در واقع سازنده اصلی نمونه ها از کلاس این متد هست :)

خیلی جاها شنیدیم کهconstructor ، dunder init  هست ولی dunder init فقط یک initializer  هست و در واقع constructor اصلی dunder new هست

جالبه بدونید که dunder new قبل از ساخته شدن کامل  یک نمونه کلاس و حتی قبل از dunder init کال میشه :)

اگر می خواهیم dunder new رو برای خودمون تغییر بدیم باید حواسمون باشه که این کار رو انجام بدیم
return super().new(cls)
تا ی
ک نمونه از اون کلاس ساخته بشه ساخته بشه
خب حالا بریم حرفمون رو اثبات کنیم :

class Test:
   
    def init(self):
        print("Hi i'm in dunder init")
   
    def new(cls):
       print("Hi i'm in dunder new")
       return super().new(cls)

t1 = Test()
print(t1)

#output
Hi i'm in dunder new                                                                                                                         
Hi i'm in dunder init
<main.Test o
bject at 0x7f7371425748>                                                                                                     


     خب الان براتون سوال میشه که اصلا این dunder new به چکاری میاد؟ یا چجوری تونستیم که خود کلاس رو به کلاسی که ازش ارث برده بفرستیم در صورتی که هنوز خود کلاس ایجاد نشده !
خب بریم که به سوالات جواب بدیم :)

برای سوال اول بعضی موقع ها هست ما می خواهیم قدرت بیشتری رو در ساختن نمونه های کلاسمون رو داشته باشیم یا در واقع اصلا نگذاریم  اون نمونه از کلاس تشکیل بشه
مثل این مثال :

class Person:
   
    def init(self, age, name):
        self.age = age
        self.name = name
       
    def new(cls, age, name):
       if age == 16 and name == 'parsa':
           return None
       return super().new(cls)

p1 = Person(16 , 'parsa')
print(p1)

#output
None


  خب در مثال
بالا ما گفتیم که قبل از اینکه نمونه از کلاس رو بسازی بیا و چک کن اگر سن اون آدم 16 و اسم اون parsa بود این  نمونه از کلاس رو نساز ( در واقع  با مقدار 16 و parsa   اون شی آدم نیست!)
البته این مثال برای طنز قضیه بود :)

خب حالا می رسیم به سوال دوم در پایتون متد type علاوه بر تشخیص یک شی وظیفه ایجاد کلاس رو هم داره (جالبه نه؟)

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

برای ایجاد یک کلاس با متد type اینگونه عمل می کنیم

my_class = type('Class_name', (), {})

print(my_class)

#output
<class 'main.Class_name'>    
 

  خب دیدن چه با حال بود :)  در قسمت اول اسم کلاس و در قسمت بعد  یک تاپل هست که کلاس هایی که قراره ازشون ارث ببره
و در قسمت آخر هم یک دیکشنری هست که خصوصیات اون کلاس رو به همراه داره
به همین راحتی !

اگر مفید بود به اشتراک بگذارید :)
👍1



tgoop.com/pythonlearnme/268
Create:
Last Update:

سلام دوستان امروز می خواهیم درباره ی dunder new صحبت کنیم ، dunder new یک special method (یک class method هم هست پس اولین مقدارش خود کلاسه)

در پایتون هست که در واقع سازنده اصلی نمونه ها از کلاس این متد هست :)

خیلی جاها شنیدیم کهconstructor ، dunder init  هست ولی dunder init فقط یک initializer  هست و در واقع constructor اصلی dunder new هست

جالبه بدونید که dunder new قبل از ساخته شدن کامل  یک نمونه کلاس و حتی قبل از dunder init کال میشه :)

اگر می خواهیم dunder new رو برای خودمون تغییر بدیم باید حواسمون باشه که این کار رو انجام بدیم
return super().new(cls)
تا ی
ک نمونه از اون کلاس ساخته بشه ساخته بشه
خب حالا بریم حرفمون رو اثبات کنیم :

class Test:
   
    def init(self):
        print("Hi i'm in dunder init")
   
    def new(cls):
       print("Hi i'm in dunder new")
       return super().new(cls)

t1 = Test()
print(t1)

#output
Hi i'm in dunder new                                                                                                                         
Hi i'm in dunder init
<main.Test o
bject at 0x7f7371425748>                                                                                                     


     خب الان براتون سوال میشه که اصلا این dunder new به چکاری میاد؟ یا چجوری تونستیم که خود کلاس رو به کلاسی که ازش ارث برده بفرستیم در صورتی که هنوز خود کلاس ایجاد نشده !
خب بریم که به سوالات جواب بدیم :)

برای سوال اول بعضی موقع ها هست ما می خواهیم قدرت بیشتری رو در ساختن نمونه های کلاسمون رو داشته باشیم یا در واقع اصلا نگذاریم  اون نمونه از کلاس تشکیل بشه
مثل این مثال :

class Person:
   
    def init(self, age, name):
        self.age = age
        self.name = name
       
    def new(cls, age, name):
       if age == 16 and name == 'parsa':
           return None
       return super().new(cls)

p1 = Person(16 , 'parsa')
print(p1)

#output
None


  خب در مثال
بالا ما گفتیم که قبل از اینکه نمونه از کلاس رو بسازی بیا و چک کن اگر سن اون آدم 16 و اسم اون parsa بود این  نمونه از کلاس رو نساز ( در واقع  با مقدار 16 و parsa   اون شی آدم نیست!)
البته این مثال برای طنز قضیه بود :)

خب حالا می رسیم به سوال دوم در پایتون متد type علاوه بر تشخیص یک شی وظیفه ایجاد کلاس رو هم داره (جالبه نه؟)

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

برای ایجاد یک کلاس با متد type اینگونه عمل می کنیم

my_class = type('Class_name', (), {})

print(my_class)

#output
<class 'main.Class_name'>    
 

  خب دیدن چه با حال بود :)  در قسمت اول اسم کلاس و در قسمت بعد  یک تاپل هست که کلاس هایی که قراره ازشون ارث ببره
و در قسمت آخر هم یک دیکشنری هست که خصوصیات اون کلاس رو به همراه داره
به همین راحتی !

اگر مفید بود به اشتراک بگذارید :)

BY 🧑‍💻PythonDev🧑‍💻


Share with your friend now:
tgoop.com/pythonlearnme/268

View MORE
Open in Telegram


Telegram News

Date: |

The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously. Telegram channels fall into two types: Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp. Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members. A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more.
from us


Telegram 🧑‍💻PythonDev🧑‍💻
FROM American