Python __main__與類的淺淺理解)

Python __main__與類的淺淺理解

python 類

相信大家應該瞭解過類,類對象,和類實例的區別,我的一點點發現:
當類作爲模塊被調用,會自動實例化。

這是被調用模塊

class const():
    def __setattr__(self,name,value):
        if name in self.__dict__:
            raise TypeError("常量不能改變")
        elif not name.isupper():
            raise TypeError("常量必須全大寫組成")
        else:
            self.__dict__[name] = value

c = 1  #用於測試 sys.modules[__name__] = const()
import sys
sys.modules[__name__] = const()

調用模塊

import Untitled

# c = Untitled.const()
#x = Untitled.c
Untitled.NAME = "fic"
print(Untitled.NAME)

try:
    Untitled.NAME = "cai"
except TypeError as err:
    print(err)

不難發現,在原函數中需要實例化後才能觸發__setattr__函數,被調用後可以直接使用無需實例化

main

其實整個練習最讓我百思不得其解的是

import sys
sys.modules[__name__] = const()

這段是有什麼用
我試着註釋掉,發現調用模塊的函數不會觸發__setattr__函數,只是生成了類對象的變量。
在這裏插入圖片描述
查閱數篇文章後,發現
爲什麼有些代碼塊,要加 if name == main
這是因爲不希望被引入的模塊被運行,正在運行的函數,name__會自動變爲__main,被調用的模塊 name 爲模塊名

=const()
是讓此模塊的功能就是const()類
我想就是這句話使得不實例化仍可以觸發__setattr__函數的原因,雖然不知道爲什麼

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