tgoop.com/pyHints/27
Last Update:
جواب سوال :classScope says helloچیزی که به نظر بعضی افراد عجیب هست رفتار متفاوت
['classScope', 'classScope', 'classScope']
['@pyHints', '@pyHints', '@pyHints']list_1, list_2هست؛ همینجا توضیح بدم که توابع - متدها (انواع متدها منظورم هست چه class boundedچه instance boundedو حتی static method) همگی Scope رو از parent میگیرند توی این کد میشه global :
سوال ممکنه پیش بیاد: پس متد hello چرا داره classScope رو چاپ میکنه ؟
دلیلش واضح هست چون class bound method هست و خود کلاس رو بعنوان پارارمتر اول میگیره و اتفاقا چون scope خودش گلوبال هست برای دسترسی به classScope باید از cls.name استفاده کنیم.
اما مورد دوم و سوم ؛ list_1که توی قانون بالا نیست پس scope اش مربوط به خود کلاس هست در نتیجه classScope رو چاپ میکنه
اما چالش سر list_2 هست؛ دلیل اینکه @pyHintsرو چاپ میکنه اینه که یک list comprehension هست و list comp چیزی نیست جز یک تابع؛ برای همین اونهایی که فکر میکنند این رفتار عجیب یا اشتباه هست مشخصا نحوه عملکرد و جزئیات پایتون رو نمیشناسند.
@pyHints
BY Python Hints

Share with your friend now:
tgoop.com/pyHints/27
