[TehPUG] about " self " ...
maliheh shajary
maliheh_m20 at yahoo.com
Sat Jun 20 06:57:12 CEST 2015
سلام
کسی میدونه که چطور میشه publish اپلیکیشن جنگو رو درست کرد مثل دات نت که داخل ویژوال استادیو این گزینه رو داره
با تشکر
On Friday, 19 June 2015, 10:41, Pouria Jahandideh <pjsofts at gmail.com> wrote:
من فکر می کنم بهتر باشه مباحث شی گرایی رو یاد بگیرید. که مستقل از پایتون و هر زبان دیگری هست.
https://www.google.com/search?q=object+oriented+concepts+in+python&gws_rd=ssl
2015-06-19 10:58 GMT+04:30 Peyman Karimi <peykar at gmail.com>:
سلام،فکر میکنم دلیل اینکه با فهم چیستی self مشکل دارید، اینه که با انواع متدها در پایتون آشنایی ندارید. در پایتون، سه نوع متد وجود داره.متد آبجکت یا object method، متد کلاس یا class method، و متد ایستا یا static method که هر سه اینها درون کلاس تعریف میشن اما کاربرد و رسالت متفاوتی دارند. من شرح رسالت هر کدوم رو خیلی ساده و مختصر میگم، که البته نیازمند این هست که با معانی فنی کلماتی مثل «نمونه» و «کلاس» آشنا باشید و بین این کلمات بتونید تمیز بدید.
۱. متد آبجکت: همونی هست که شما درباره اون سوال داری و اولین پارامتری که بهش ارسال میشه «شیء» یا همون «نمونه»ای ایجاد شده از کلاس هست. برطبق «عرف» (هرجا کانونشن: convention در علوم رایانه دیدی، یعنی بهتره رعایتش کنی، اما مجبور نیستی) اسمش self هست. وقتی ما نیاز داریم درون متدی که مینویسیم از دادههای مربوط به شیء استفاده کنه، از این نوع متد استفاده میکنیم. مثل همون مثالی که آقای خشنودی زدن و از مقدارِ property نام فرد استفاده کردن که مختصِ اون نمونهی خاص هست.
۲. متد کلاس: اگر بخواهیم یک عملکرد برای کلاسمون تعریف کنیم که نیازی به دادههای یک نمونه خاص از اون کلاس نداره، اما به دادههای تعریف شده در خود کلاس نیاز داره، از کلاس متد استفاده میکنیم. در این مواقع بصورت «عرف» از لفظ cls برای فرستادن کلاس به درون متد استفاده میشه، یعنی تعریفی که داریم چیزی شبیه به این هست هست:class A(object): FOO = 'foo' @classmethod
def a_class_method(cls, bar): print cls.FOO ...
۳. نوع سوم هم استتیک متد یا متد ایستا هست. در این مواقع در حقیقت ما یک تابع داریم، که فقط چون وابسته به یک کلاس خاص هستد و با کاری رو در رابطه با اون انجام میده، اما هیچنیازی به دادههای کلاس یا آبجکت نداره، بهش متد استاتیک میگن. تنها فرقش با تابع معمولی اینه که درون کلاس تعریف شده. چیزی شبیه به این:class A(object): @staticmethod
def a_class_method(foor, bar): print "Hi!" ...
امیدوارم کمکی کرده باشم.
2015-06-18 12:05 GMT+04:30 Vahid Maani <vahidmaani at gmail.com>:
مهدی خوب توضیح داد چندتا نکته رو هم اضافه کنم، self اسم اولین آرگومان متدها هست و هیچ لزومی نداره حتماً از این اسم استفاده کنی ولی استفاده از self یه قانون نانوشتهی خیلی قوی هست که خوانایی کدت بالا بره یعنی میتونی از کلمات this و هر اسم دلخواه استفاده کنی. دوّم اینکه این self به خود ابجکت/نمونه اشاره داره.
(چیزهای زیادی نوشتم ولی به نظرم اومد که با نوشتن نمیشه کامل و شفاف توضیح داد و احتمال اینکه گیجترت کنه هست. به نظرم توی این مورد هم طرح منتورشیپ مهدی بهتر جواب میده :) )
On 06/18/2015 03:33 AM, Mehdy Khoshnoody wrote:
سلام
شما فرض کن یه کلاس داری به اسم User:
class User(object): def __init__(self, name): self.name = name def say_hi(self): print("hey, {}!!".format(self.name))
خوب شما الان میتونی از این کلاس نمونه بسازی. first_user = User(name="Abbas") اتفاقی که تو کد بالا میوفته اینه که متد __init__ کلاس یوزر صدا زده میشه و آرگومانهاش name="abbas" و self=first_user هست. توی متد ما خاصیت name رو به self(first_user) اضافه کردیم و اونو برابر با مقدار name قرار دادیم.
در نتیجه شما الان first_user تون یه خاصیت به اسم name داره که میتونید ازش استفاده کنید. print("hello, {}".format(first_user.name)) حالا شما فرض کن تو کلاس User یه متد بنویسی که همهی نمونههایی که از این کلاس ساخته میشن این متد رو داشته باشن. مثلا متد say_hello! میخوایم وقتی متد رو صدا زدیم به یوزر سلام کنه. خوب ما که نمیدونیم الان کدوم نمونه از User این متد رو صدا زده (first_user, second_user ,...). در نتیجه اینجا مفهوم self کاملا ملموسه! بهش میگیم مهم نیست کدوم نمونه بود، همهی نمونهها name دارند. تو از name خوده(self) نمونه استفاده کن. وقتی کد زیر اجرا میشه first_user.say_hi() در واقع این اتفاق میوفته User.say_hi(self=first_user) پس وقتی این متد اجرا میشه self، که خود نمونهی فعلی باشه برابر با first_user هست و مقدار همهی خواصی که در متد استفاده شده مربوط به first_user خواهد بود.
و در یه جمله «self هرجای کلاس برابر نمونهی فعلی است»
On Thu, Jun 18, 2015 at 1:21 AM Abbas Aghasy <hlmaz8080 at gmail.com> wrote:
سلام به همه ی دوستان ! میشه به من بگید کار self چیه ؟! کسی میتونه به طور کلی توضیح بده ؟! ممنون میشم اگه طوری بگید که من هم متوجه بشم چون من 3 ماهه که با پایتون کار میکنم ! خسته نباشد ! برای توضیح بیشتر این ویدیو رو هم نگاه کنید ! _______________________________________________
TehPUG mailing list
Website: http://tehpug.ir
List Address" TehPUG at python.org
List Options: https://mail.python.org/mailman/listinfo/tehpug
_______________________________________________
TehPUG mailing list
Website: http://tehpug.ir
List Address" TehPUG at python.org
List Options: https://mail.python.org/mailman/listinfo/tehpug
--
وحید معانی
Vahid Maani
Vahid.Maani at gmail.com
Vahid.Maani at protonmail.com
http://www.gnutips.ir | https://github.com/vahit
_______________________________________________
TehPUG mailing list
Website: http://tehpug.ir
List Address" TehPUG at python.org
List Options: https://mail.python.org/mailman/listinfo/tehpug
--
Peyman Karimi
Cell: +98 912 367 6406
↪ http://about.me/peyman.karimi
Listen to the mustn'ts, child. Listen to the don'ts.
Listen to the shouldn'ts, the impossibles, the won'ts.
Listen to the never haves, then listen close to me...
Anything can happen, child. Anything can be...
- Shel Silverstein
_______________________________________________
TehPUG mailing list
Website: http://tehpug.ir
List Address" TehPUG at python.org
List Options: https://mail.python.org/mailman/listinfo/tehpug
--
PJ
_______________________________________________
TehPUG mailing list
Website: http://tehpug.ir
List Address" TehPUG at python.org
List Options: https://mail.python.org/mailman/listinfo/tehpug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tehpug/attachments/20150620/79c946ba/attachment.html>
More information about the TehPUG
mailing list