Python中的__name__和類

1.  

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

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

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

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

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

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

[python]   view plain  copy
  1. #Test.py  
  2. class Test:  
  3.     def __init(self):pass  
  4.     def f(self):print 'Hello, World!'  
  5. if __name__ == '__main__':  
  6.     Test().f()  
  7. #End  
  8. 你在cmd中輸入:  
  9. C:>Python Test.py  
  10. Hello, World!  
  11. 說明:"__name__ == '__main__'"是成立的  
[python]   view plain  copy
  1. 你再在cmd中輸入:  
  2.   
  3. C:>python  
  4.   
  5. >>>import Test  
  6.   
  7. >>>Test.__name__                #Test模塊的__name__  
  8.   
  9. 'Test'  
  10.   
  11. >>>__name__                       #當前程序的__name__  
  12.   
  13. '__main__'  
  14.   
  15. 不管怎樣,Test.py中的"__name__ == '__main__'"都不會成立的!  
  16.   
  17. 因此,下一行代碼永遠不會運行到!  

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__稱方
繼承類定義:

[python]   view plain  copy
  1. #單繼承示例    
  2.     class student(people):    
  3.         grade = ''    
  4.         def __init__(self,n,a,w,g):    
  5.             #調用父類的構函    
  6.             people.__init__(self,n,a,w)    
  7.             self.grade = g    
  8.         #覆寫父類的方法    
  9.         def speak(self):    
  10.             print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))         
  11.     s = student('ken',20,60,3)    
  12.     s.speak()  

類的多重繼承

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

[python]   view plain  copy
  1. #另外一個類,多重繼承以前的準備    
  2. class speaker():    
  3.     topic = ''    
  4.     name = ''    
  5.     def __init__(self,n,t):    
  6.         self.name = n    
  7.         self.topic = t    
  8.     def speak(self):    
  9.         print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))    
  10.   
  11. #多重繼承    
  12. class sample(speaker,student):    
  13.     a =''    
  14.     def __init__(self,n,a,w,g,t):    
  15.         student.__init__(self,n,a,w,g)    
  16.         speaker.__init__(self,n,t)    
  17.   
  18. test = sample("Tim",25,80,4,"Python")    
  19. test.speak()#方法名同,默認調用的是在括號中排前地父類的方法
相關文章
相關標籤/搜索