1. 程式人生 > >python的學習之路day6

python的學習之路day6

ons tro 利用 調用 __main__ getattr 輸入 run 需要

反射

利用字符串的形式去對象(模塊)中操作(尋找/檢查/刪除/設置)成員(函數),反射

用了一個仿網頁的get方法實現

commons.py文件

commons.py
def login():
    print("登錄頁面")


def logout():
    print("退出頁面")


def home():
    print("主頁面")

index.py文件

import commons  # 調用commons模塊

def run():
    url = input("請輸入要訪問的url:")
    """
    url==字符串類型,如果url==“login”
    commons.url()   顯然,這樣是不對的,因為這樣執行commons會去他裏面找他是否有url這個函數,如果沒有,直接報錯
    利用字符串的形式去對象(模塊)中操作(尋找/檢查/刪除/設置)成員(函數),反射
    """
    # setattr()
    # delattr()
    if hasattr(commons, url):  # url==字符串,而現在,url相當於等於一個函數,我們輸入的函數,用hasattr去判斷是否存在,返回值True或False
        func = getattr(commons, url)  # 用getattr拿取這個函數,比如url==login,那麽也就是說現在(func==commons.login)
        func()  # 然後我們再來執行以下func,就表示執行commons裏面的函數
    else:
        print("404")  # 如果hasattr沒有檢查到,就執行這句404


if __name__ == ‘__main__‘:  # __name__ 是當前模塊名,當模塊被直接運行時模塊名為 __main__ 。這句話的意思就是,當模塊被直接運行時,以下代碼塊將被運行,當模塊是被導入時,代碼塊不被運行。
    run()

輸出:
請輸入要訪問的url:login
登錄頁面

從上面可以看出來,我們只能訪問一個模塊,如果增加一個模塊,我們需要去import裏面繼續添加,當然,python也想過這個問題,所以import也可以傳遞字符串

一個小小的測試:

#文件:commons.py
def login():
    print("登錄頁面")


def logout():
    print("退出頁面")


def home():
    print("主頁面")


#文件:import_test.py
obj = __import__("commons")
obj.login()
obj.logout()
obj.home()

輸出:
登錄頁面
退出頁面
主頁面

python的學習之路day6