
با آموزش حضوری و آنلاین مقدماتی تا پیشرفته پایتون , محبوبترین زبان برنامهنویسی دنیا در محیطی عملی کاربردی و پروژه محور وارد دنیای برنامه نویسی شوید
مشاهده بیشتر
اگه پایتون بلدی و میخوای وارد دنیای هوش مصنوعی بشی، این دوره مخصوص توئه! با آموزش پروژهمحور و همراهی اساتید حرفهای، یاد بگیر چطور از هوش مصنوعی تو زمینههایی مثل پزشکی، بورس و املاک استفاده کنی.
مشاهده بیشتر
اگه یادگیری ماشین بلدی و آمادهای وارد چالشهای حرفهای بشی، دوره یادگیری عمیق پروژهمحور برای توئه! طراحی شبکههای عصبی و کار روی پروژههای واقعی مثل تشخیص تصویر و پردازش زبان رو اینجا یاد میگیری.
مشاهده بیشتر
با این دوره، Django رو از پایه شروع کن و به یک حرفهای تبدیل شو! یاد بگیر چطور با معماری MVT، پایگاه داده و RESTful API کار کنی، پروژههای واقعی بسازی و آنها رو روی وب سرور مستقر کنی!
مشاهده بیشترمشخصات مقاله
آموزش random remarks در پایتون
اظهارات تصادفی(random remarks): در Python
اگر یک نام ویژگی(attribute name) مشابه هم در یک نمونه و هم در یک کلاس رخ دهد، سپس جستجوی ویژگی، نمونه را اولویت بندی می کند.
1 2 3 4 5 6 7 8 9 10 11 12 | >>> class Warehouse: purpose = 'storage' region = 'west' >>> w1 = Warehouse() >>> print(w1.purpose, w1.region) storage west >>> w2 = Warehouse() >>> w2.region = 'east' >>> print(w2.purpose, w2.region) storage east < button ></ button > |
ویژگی های داده همانطور که توسط کاربران معمولی (مشتری ها) یک شی ارجاع داده می شوند، ممکن است توسط متدها نیز ارجاع یابند. به بیان دیگر، کلاس ها برای پیاده سازی انواع داده انتزاعی خالص قابل استفاده نیستند. در حقیقت، هیچ چیزی در پایتون، اجبار به پنهان سازی داده را ممکن نمی کند—همه چیز بستگی به قرارداد دارد. ( از طرف دیگر، پیاده سازی پایتون، نوشته شده در C، می تواند به طور کامل جزییات پیاده سازی را پنهان کند و دسترسی به یک شی را در صورت نیاز کنترل کند. توسط ضمیمه های پایتون که به C نوشته شده است، می توان از این استفاده کرد. )
مشتری ها (Clients) باید با احتیاط از ویژگی های داده استفاده کنند—مشتری ها ممکن است ثابت های(invariants) نگهداری شده توسط متد ها را با مهر زدن روی ویژگی های داده آنها اشتباه بگیرند. توجه داشته باشید که ممکن است مشتری ها ویژگی های داده خود را بدون تاثیر گذاری روی اعتبار متدها، به یک شی نمونه اضافه کنند، البته تا زمانی که از ناسازگاری بین نام ها پرهیز شود—مجددا می گویم، قرارداد های نام گذاری می تواند مانع بسیاری از دردسرها در اینجا شود.
هیچ گونه اختصار نویسی برای ارجاع ویژگی های داده(یا سایر متدها) از درون متدها وجود ندارد. در واقع به نظر من این خوانایی متدها را افزایش می دهد: در نگاه کلی به یک متد، امکان اشتباه و سر در گمی بین متغیرهای محلی و متغیرهای نمونه به هیچ وجه وجود ندارد.
اغلب اولین آرگومان یک متد self نام دارد. این فقط یک قرارداد است. نام self مطلقا هیچ معنی خاصی برای پایتون ندارد. هر چند توجه داشته باشد که با رعایت نکردن قراردادها، ممکن است کد شما برای سایر برنامه نویسان پایتون از خوانایی کمتری برخوردار باشد. همچنین ممکن است یک برنامه مرورگر کلاس با تکیه بر چنین قراردادهای نوشته شود.
هر شی تابعی که یک ویژگی کلاس باشد، یک متدی را برای نمونه های آن کلاس تعریف می کند. ضروری نیست که تعریف تابع به صورت نوشتاری درون تعریف کلاس قرار گیرد (محصور باشد). تخصیص یک شی تابع به یک متغیر محلی درون کلاس نیز کفایت می کند. برای مثال:
1 2 3 4 5 6 7 8 9 10 11 12 | # Function defined outside the class def f1(self, x, y): return min(x, x+y) class C: f = f1 def g(self): return 'hello world' h = g < button ></ button > |
حال f,g و h همه ویژگی های کلاس c هستند که به اشیای تابع رجوع می کنند، و متعاقبا همه آنها متدهای نمونه های c هستند – h دقیقا برابر است با g. توجه داشته باشید که معمولا این عمل تنها برای سر در گم کردن خواننده برنامه انجام می شود.
ممکن است متدها با استفاده از ویژگی های متد آرگومان self، سایر متدها را فراخوانی کنند.
1 2 3 4 5 6 7 8 9 10 11 | class Bag: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwice(self, x): self.add(x) self.add(x) < button ></ button > |
متدها ممکن است به همان شیوه مشابه ارجاع توابع معمولی، نام های سراسری را ارجاع دهند. حوزه سراسری مربوط به یک متد، ماژولی است که در بردارنده تعریف آن است. (یک کلاس هرگز به عنوان یک حوزه سراسری استفاده نمی شود.) درحالی که به ندرت به دلیل خوبی برای استفاده از داده سراسری در یک متد بر میخوریم، کاربرد های درست و قانونی بسیاری از حوزه سراسری وجود دارد: یک مورد این است که، توابع و ماژول های وارد شده به حوزه سراسری می توانند مانند توابع و کلاس های تعریف شده در آن، توسط متدها استفاده شوند. معمولا کلاسی که در بردارنده متد است، خود نیز درون حوزه سراسری تعریف شده است. در بخش بعد دلایل خوبی برای اینکه چرا یک متد ممکن است بخواهد به کلاس خود ارجاع دهد، را بیان می کنیم.
هر مقدار، یک شی است و بنابراین یک کلاس دارد(نوع آن نیز نامیده می شود) و به عنوان object.__class__ ذخیره می شود.