Python中的__name__

python中if __name__ == '__main__': 的解析

 

常常會在代碼的最下面看到if __name__ == '__main__':,如今就來介 紹一下它的做用.html

        模塊是對象,而且全部的模塊都有一個內置屬性 __name__。一個模塊的 __name__ 的值取決於您如何應用模塊。若是 import 一個模塊,那麼模塊__name__ 的值一般爲模塊文件名,不帶路徑或者文件擴展名。可是您也能夠像一個標準的程序樣直接運行模塊,在這 種狀況下, __name__ 的值將是一個特別缺省"__main__"。python

在cmd 中直接運行.py文件,則__name__的值是'__main__';函數

而在import 一個.py文件後,__name__的值就不是'__main__'了;spa

從而用if __name__ == '__main__'來判斷是不是在直接運行該.py文件code

#Test.py
class Test:
    def __init(self):pass
    def f(self):print 'Hello, World!'
if __name__ == '__main__':
    Test().f()
#End
你在cmd中輸入:
C:>Python Test.py
Hello, World!
說明:"__name__ == '__main__'"是成立的
 
你再在cmd中輸入:
 
C:>python
 
>>>import Test
 
>>>Test.__name__                #Test模塊的__name__
 
'Test'
 
>>>__name__                       #當前程序的__name__
 
'__main__'
 
不管怎樣,Test.py中的"__name__ == '__main__'"都不會成立的!
 
因此,下一行代碼永遠不會運行到!

 


2. Python中的類
   
class <類名>:
     <語句>
      類實例化後,可使用其屬性,實際上,建立一個類以後,能夠經過類名訪問其屬性。若是直接使用類名修改其屬性,那麼將直接影響到已經實例化的對象
類的私有屬性:
  __private_attrs  兩個下劃線開頭,聲明該屬性爲私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs
類的方法:
  在類地內部,使用def關鍵字能夠爲類定義一個方法,與通常函數定義不一樣,類方法必須包含參數self,且爲第一個參數
私有的類方法:
  __private_method 兩個下劃線開頭,聲明該方法爲私有方法,不能在類地外部調用。在類的內部調用slef.__private_methods
類的專有方法:
__init__  構造函數,在生成對象時調用
__del__   析構函數,釋放對象時使用
__repr__ 打印,轉換
__setitem__按照索引賦值
__getitem__按照索引獲取值
__len__得到長度
__cmp__比較運算
__call__函數調用

__add__加運算
__sub__減運算
__mul__乘運算
__div__除運算
__mod__求餘運算
__pow__稱方
繼承類定義:
#單繼承示例  
    class student(people):  
        grade = ''  
        def __init__(self,n,a,w,g):  
            #調用父類的構函  
            people.__init__(self,n,a,w)  
            self.grade = g  
        #覆寫父類的方法  
        def speak(self):  
            print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))       
    s = student('ken',20,60,3)  
    s.speak()

 


類的多重繼承

    須要注意圓括號中父類的順序,如果父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索,即方法在子類中未找到時,從左到右查找父類中是否包含方法


#另外一個類,多重繼承以前的準備  
class speaker():  
    topic = ''  
    name = ''  
    def __init__(self,n,t):  
        self.name = n  
        self.topic = t  
    def speak(self):  
        print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))  
 
#多重繼承  
class sample(speaker,student):  
    a =''  
    def __init__(self,n,a,w,g,t):  
        student.__init__(self,n,a,w,g)  
        speaker.__init__(self,n,t)  
 
test = sample("Tim",25,80,4,"Python")  
test.speak()#方法名同,默認調用的是在括號中排前地父類的方法
相關文章
相關標籤/搜索