Python 模組內省

2022-09-19 22:57:15 字數 1456 閱讀 8209

模組也是一等物件

globals():

返回乙個字典,表示當前的全域性符號表。這個符號表始終針對當前模組(對函式或方法來說,是指定義它們的模組,

而不是呼叫他它們的模組)

# test_02.py

gol_num = 3

def a():

print('a')

def b():

print('b')

def c():

print('c')

if __name__ == '__main__':

resu = [k_v for k_v in globals().items()]

print(resu)

# for name in globals().items():

# print(name) error: runtimeerror: dictionary changed size during iteration

輸出:

[('__name__', '__main__'), ('__doc__', none), ('__package__', none), ('__loader__', <_frozen_importlib_external.sourcefileloader object at 0x0000026a265f4880>), ('__spec__', none), ('__annotations__', {}), ('__builtins__', ), ('__file__', 'e:\\pyproject\\homework\\20220201\\test_02.py'), ('__cached__', none), ('gol_num', 3), ('a', ), ('b', ), ('c', )]
import inspect

# 被檢查的模組

import test_02

if __name__ == '__main__':

# inspect.getmembers(module_name, inspect.isfunction): 注意:第乙個引數是模組名稱, 第二個引數沒有()

# name: 函式名字, func: test_02中的函式物件

for name, func in inspect.getmembers(test_02, inspect.isfunction):

print(f"name:, func:")

# 呼叫test_02.py 中的函式

func()

out:

name:a, func:a func ran

name:b, func:b func ran

name:c, func:c func ran

究竟是內省還是內省

下面我們就對內省做一下簡單介紹 通過propertydescriptor類操作bean的屬性 通過introspector類獲得bean物件的 beaninfo,然後通過 beaninfo 來獲取屬性的描述器 propertydescriptor 通過這個屬性描述器就可以獲取某個屬性對應的 gett...

java反射 內省

本文所說的類是類對應的class的例項,其實類本身就是class的例項。1 類是class的例項,通常的物件是類的例項。2 根據類名 類的例項 類的屬性都能獲取到類。3 如果類有無參的建構函式,根據類能反射出該類的乙個例項,如果有有參的建構函式則根據類獲取引數型別獲取建構函式,再根據建構函式反射出類...

NSObject 內省方法

內省 introspection 是物件導向語言和環境的乙個強大特性,objective c和cocoa在這個方面尤其的豐富。內省是物件揭示自己作為乙個執行時物件的詳細資訊的一種能力。這些詳細資訊包括物件在繼承樹上的位置,物件是否遵循特定的協議,以及是否可以響應特定的訊息。nsobject協議和類定...