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