Python對象的自省機制學習筆記

自省是通過一定的機制查詢到對象的內部結構

__dict__

通過__dict__查詢屬性

class User:
    name = "Y4tacker"


class Student(User):
    def __init__(self, schoolname):
        self.schoolname = schoolname


if __name__ == '__main__':
    user = Student("aaa")
    # `__dict__查詢屬性`
    print(user.__dict__)

輸出結果爲{'schoolname': 'aaa'}但如果我們再加上這樣一個語句print(user.name)居然把Y4tacker打印了出來,這是爲什麼呢?
因爲name屬於Person這個類,類也是對象,name是屬於User裏的一個屬性,並不是User裏的屬性,在用.這個符號訪問的時候它會向上查詢,這與之前所提到的MRO一致,只是實例在查詢的時候,它會根據MRO的一個數據結構查詢到User而已,print(User.__dict__)會打印
{'__module__': '__main__', 'name': 'Y4tacker', '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None},爲啥會多這麼多,因爲User是一個類,類比實例更加豐富

dir()

它會列出對象裏的所有屬性,只會打印出屬性名稱,而不顯示屬性的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章