自省就是透過一定機制查詢到物件的內部結構,也就是執行時獲取物件內部的屬性以及型別,在Python中
dir(),type(), hasattr(), isinstance()都是很好的自省例子
#!/usr/bin/env python # -*- coding: utf-8 -*- class Person: name = "人類" class Student(Person): def __init__(self, school_name): self.school_name = school_name if __name__ == "__main__": s = Student("清華大學") # 透過__dict__查詢屬性 print(s.__dict__) s.__dict__["school_addr"] = "北京市 海淀區" # 動態新增一個屬性 print(s.__dict__["school_addr"]) # 獲取屬性方式1 print(s.school_addr) # 獲取屬性方式2 print(dir(Student)) # 檢視物件有什麼屬性 # s會比Student多2個屬性,一個是 school_name 和 school_addr 因為 s是例項,例項化的時候才會執行 init 方法,而類Student自己不會執行init方法 print(dir(s)) print("\n") print("Student類是否有 __init__ 屬性:", hasattr(Student, "__init__")) # 判斷物件是否有某種屬性 print("s物件是否有 __init__ 屬性:", hasattr(s, "__init__")) print("Student類是否有 school_name 屬性:", hasattr(Student, "school_name")) print("s物件是否有 school_name 屬性:", hasattr(s, "school_name"))