روش های استاتیک روش سوم، MyClass.staticmethod با علامت علامت گذاری شد
روش های استاتیک روش سوم، MyClass.staticmethod با علامت علامت گذاری شد
دکوراتور @staticmethod6 تا آن را به عنوان یک روش ایستا علامت گذاری کنید. البته، می توان تعداد دلخواه پارامترهای دیگر را پذیرفت.در نتیجه، یک متد استاتیک نمی تواند وضعیت شی یا وضعیت کلاس را تغییر دهد. روشهای استاتیک محدود به دادههایی هستند که میتوانند به آنها دسترسی داشته باشند در درجه اول راهی برای فضای نام متدهای شما. این نوع روش یک پارامتر self یا cls نمی گیرد، اگرچه، من می دانم که این بحث تا این مرحله کاملاً تئوری بوده است. من همچنین بر این باور باشید که مهم است که یک درک شهودی ایجاد کنید برای اینکه چگونه این انواع روش ها در عمل متفاوت هستند. به همین دلیل است که می رویم اکنون چند نمونه عینی بیایید آنها را در عمل ببینیم! بیایید نگاهی به نحوه عملکرد این روش ها در هنگام تماس بیندازیم آنها را ما با ایجاد یک نمونه از کلاس و سپس فراخوانی شروع می کنیم MyClass به گونه ای تنظیم شده بود که پیاده سازی هر روش یک تاپل حاوی اطلاعاتی را برمیگرداند که میتوانیم از آن برای ردیابی آنچه در حال وقوع است و به کدام بخشهای کلاس یا شیء آن متد استفاده کنیم، استفاده کنیم.
وقتی یک متد نمونه را فراخوانی میکنیم،
این اتفاق میافتد:>>> obj = MyClass() سه روش مختلف روی آن >>> obj.method() (‘instance method called’, <MyClass instance at 0x11a2>)این تایید می کند که، در این مورد، روش نمونه ای به نام روش دارد دسترسی به نمونه شی (چاپ شده به عنوان <MyClass instance>) از طریق هنگامی که متد فراخوانی می شود، پایتون آرگومان self را جایگزین می کند شیء نمونه، obj. میتوانیم قند نحوی ارائهشده توسط دستور نقطهای ()obj.method را نادیده بگیریم و Object نمونه را به صورت دستی ارسال کنیم تا همان نتیجه را به دست آوریم:>>> MyClass.method(obj) استدلال خود (‘instance method called’, <MyClass instance at 0x11a2>)به هر حال، متدهای نمونه می توانند از طریق خود کلاس نیز دسترسی داشته باشند ویژگی self.__class__. این باعث میشود که روشهای نمونه از نظر محدودیتهای دسترسی پرقدرت باشند—آنها میتوانند آزادانه وضعیت موجود را تغییر دهند بیایید روش کلاس را در ادامه امتحان کنیم: >>> obj.classmethod() نمونه شی و روی خود کلاس. (‘class method called’, <class MyClass at 0x11a2>)فراخوانی classmethod() به ما نشان داد که به آن دسترسی ندارد شی <MyClass instance>، اما فقط به شی <class MyClass>، خود کلاس را نشان می دهد (همه چیز در پایتون یک شی است، حتی توجه داشته باشید که چگونه پایتون به طور خودکار کلاس را به عنوان اولین آرگومان به تابع ارسال می کند وقتی که MyClass.classmethod() را فراخوانی می کنیم. صدا زدن یک روش در پایتون از طریق دستور نقطه این رفتار را تحریک می کند. این پارامتر self در متدهای نمونه به همین صورت عمل می کند. خود کلاس ها). لطفاً توجه داشته باشید که نامگذاری این پارامترها self و cls فقط یک است قرارداد. به همین راحتی می توانید نام آنها را the_object و بگذارید the_class و همین نتیجه را بگیرید. تنها چیزی که مهم است این است که آنها هستند اکنون زمان فراخوانی متد استاتیک است:>>> obj.staticmethod() در لیست پارامترهای آن متد خاص، اول قرار گرفته است. ‘static method called’
قوانین ارسال دیدگاه در سایت