در مورد __getattribute__

پرسیده شده
فعالیت 884 روز پیش
دیده شده 566 بار
0

خیلی ممنونم اقای محمدعلی،self رو فهمیدم که باید استفاده کنم،فقط بی زحمت یه سوال دیگه داشتم

class User:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __getattribute__(self, item):
        print("__getattribute__", item)
        return super().__getattribute__(item)

    def __getattr__(self, item):
        print("__getattr__", item)
        return self.__setattr__(item, None)
        
        
if __name__ == "__main__":
    user = User("alireza", 20)
    print(user.car)
    user.car = 'BMV'
    print(user.car)

 

تابع __getattribute__ موقع استفاده از هر متد و اتریبیوتی صدا زده میشه حتی اگه اون اتریبیوت و متد وجود نداشته باشه میخوام بگم در اینجا سوپر اگه صدا زده نشه و self به کار ببرم حلقه بی نهایت میخوره و برنامه از کار میوفته،میخوام بدونم چیجوری وقتی سوپر صدا زده میشه میره اون مقدار برمیگردونه چون ما در object چیزی ذخیره نکردیم؟؟چون پدر کلاس User همون objectهست،یعنی ما هر کلاسی درست میکنیم هر اتریبیوت و متدی تعریف میکنیم همون ها دقیقا در object هم ذخیره میشه؟اگه ممکنه راهنمایی کنید خیلییی ممنونم از شما 

فایل پیوست

علیرضا قرقابی
علیرضا قرقابی

21 آبان 00

0
حذف شده

سلااااااااااااااااااام بفرما

وقتی شما 

self.__getattribute__()

رو صدا میزنی. داری متد __getattribute__ که داخل همین کلاس مربوط به self هست رو صدا میزنی.

وقتی هم داری 

super().__getattribute__()

رو صدا میزنی. اول super رو که صدا زدی (call کردی) میره و کلاس پدرش رو پیدا میکنه و متد __getattribute__ اون رو صدا میزنه.

در واقع فرق این دو خط کد در این هست که متد (یا تابع) کدوم کلاس صدا زده بشه الان، یعنی انگار تو ۲ تا کلاس ۲ تا فانکشن داریم با یه اسم و با ورودی های یکسان و الان فقط داری تصمیم میگیری کدوم فانکشن از کدوم کلاس اجرا بشه.

جواب سوال دومت، خیر.

 

اگر انگلیسی ات خوبه یه مقدار در مورد super بخون و اگر لازم بود یه مقدار در مورد ارث بری و شی گرایی تو پایتون بیشتر بخون.

مثلا من سرچ کردم:

python super function

و یه مقاله خوبی پیدا کردم با عنوان 

Supercharge Your Classes With Python super()

همون عنوان اولش (An Overview of Python’s super() Function) رو که خوندم به فهم بهتری رسیدم که یه توضیح و خلاصه ای میگه از کل مقاله و موضوع.

 

امیدوارم با این توضیحات و سرچ کردن و مقاله خوندن موضوع برات شفاف بشه و جا بیوفه.

اگر بعدش هم باز سوالی داشتی بفرما در خدمتم :)

فایل پیوست

محمدعلی رضا

توسط

محمدعلی رضا

24 آبان 00