یه سوالی ذهنه منو درگیر کرده و بدجوری داره میره رو مخم :))))
آقا سوال کلیم اینه ما توی پایتون وقتی یه کلاسی میسازیم و توش هرچندتا متودی که میسازیم اولین آرگومانی که به اون متودمون میدیم کلمه ی (self) هستش درسته. خب این سلف یعنی اینکه وقتی ما آبجکتی (شی) ای از روی کلاسمون میسازیم و از اون متود هایی که نوشتیم توی کلاسمون برای همین آبجکت هایی که نوشتیم استفاده میکنیم این آبجکت های ما به صورت اتوماتیک میرن جای اون self میشینن.
حالا سواله اصلیه من اینه که توی پایتون ما وقتی میخوایم از UnitTest استفاده کنیم تا مثلا توابعمون رو تست کنیم یا کلا کدمون رو تست کنیم
وقتی از کتابخونه ی unittest.TestCase ارث بری میکنیم و متودی میسازیم طبق معمول آرگومان اول متود هامون رو (self) میدیم اما نکته و سوال اصلیه من اینه که ما توی unittest اصلا آبجکتی نمیسازیم که بخواد بره جای این (self) ها بشینه پس دلیلش چیه که self میدیم؟ یعنی یه آبجکت مربوطه از کتابخونه ی unittest به طور خودکار میاد جای این (self) ها میشینه؟
چندتا نمونه کدم میفرستم تا بهتر منظورمو متوجه شید.
class Game:
def say_hi(self):
print('Hi')
g1 = Game
g1.say_hi()
###The OutPut Is: Hi
اما حالا میخوایم همین متودمون رو با استفاده از کتابخونه ی یونیت تست بررسی و تست کنیم.و اگه دقت کنید من هیچ آبجکتی نمیسازم...
import unittest
import File
class TestFile(unittest.TestCase):
def test_say_hi(self):
self.assertEqual(File.say_hi , 'Hi')
if __name__ == '__main__':
unittest.main()
و خروجی میگه که یه تست رو انجام داده و مشکلی نداشته
حالا ما اینجا هیچ آبجکتی که نساختیم که به صورت اتوماتیک بره جای اون (self) ها بشینه
آیا نظر شما چیست :)))))))
خودم نظرم اینه که یه آبجکت مربوط به این متود assertEqual از کلاس TestCase خود کتابخونه به صورت اتوماتیک میره جای این (self) ها میشینه طبق کدی که برنامه نویسش نوشته....
کی گفته شما ابجکتی نمی سازید ؟
شما وقتی ارث بری میکنی تمامی اون کلاسی که ارث بری کردید میاد تو کلاس خودتون حالا فراخانی رو باید با self انجام بدید . دیگه نمیشه بگید سلف به چه دردی میخوره دارید یک ابجکت بر اساس اون چیزی که ارث بری شده مینویسید با چند تا چیز دیگه درواقع شما یک ابجکت رو کپی کردید .
و سلف هم به همون ابجکت اشاره داره
بهترین راه برای درک کردن چنین مواردی سر زدن به کدهای منبع هست
https://github.com/python/cpython/blob/3.10/Lib/unittest/__init__.py
وقتی کد منبع رو بخونی به عنوان برنامه نویس میفهمی چه اتفاقی داره می افته
سلام خسته نباشید
ببین اینی که میگم کامل نیست چون میشه روش بحث کرد ولی در کل self به کلاس فعلی اشاره میکنه اگه زبون های دیگه هم کار کرده باشی اصولا یه this باید داشته باشه دقیقا self جای this هست
کی گفته شما ابجکتی نمی سازید ؟
شما وقتی ارث بری میکنی تمامی اون کلاسی که ارث بری کردید میاد تو کلاس خودتون حالا فراخانی رو باید با self انجام بدید . دیگه نمیشه بگید سلف به چه دردی میخوره دارید یک ابجکت بر اساس اون چیزی که ارث بری شده مینویسید با چند تا چیز دیگه درواقع شما یک ابجکت رو کپی کردید .
و سلف هم به همون ابجکت اشاره داره
این درست بود.
خودمم نظرم یه همچین چیزی بود درواقع داریم از چیزایی که توی اون کلاسی که ازش ارث بری کردیم استفاده میکنیم.
و آبجکت های موردنظری که از همون کلاس ساخته شده رو هم به صورت خودکار ارث بری میکنیم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟