1. 程式人生 > >python自動化運維學習第十二天--面向物件和類

python自動化運維學習第十二天--面向物件和類

面向物件和類

面向過程和麵向物件程式設計

  • 面向過程程式設計:函數語言程式設計,C語言等
  • 面向物件程式設計:C++,Java,Python等
類和物件

類和物件是面向物件中的兩個重要概念

  • 類:是對事物的抽象,比如:人類、球類等
  • 物件:是類的一個例項,比如:足球、籃球等

類用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。
例項說明:球類可以對球的特徵和行為進行抽象,然後可以例項化一個真實的球實體出來。

面向物件的主要思想是:封裝、繼承和多型
方便解決比較複雜的問題,並且維護比較容易。
類定義:


類把需要的變數和函式組合到一起,這種包含稱為“封裝”
class A(object):
類名一般為首字母大寫,多個單片語成的類名要單詞的首字母都要大寫。
類的結構:
class 類名:
成員變數–>屬性
成員函式–>方法
類的建立

class MyClass(object):
    var = "variable"           #類的屬性
    def fun(self):             #類的方法,引數可以有多個,但self引數必須要有
        print "I am funcation"

類的方法中至少有一個引數“self”,“self”表示類本身。

#!/usr/bin/python
# -*- coding: utf-8 -*-
class People(object):            #定義一個類
    color = "yellow"             #類的屬性
    def think(self):             #類的方法
        self.color = "black"     #在方法中修改類屬性
        print "I am a %s" % self.color
        print "I am a thinker"
ren = People()                   #例項化類
print ren.color #列印類的屬性 ren.think() #執行類的方法

建立物件的過程稱為例項化,當一個物件被建立後,包含三個方面的特性:物件控制代碼、屬性和方法。
控制代碼用於區分不同的物件,上例中的“ren”即為物件控制代碼。
物件的屬性和方法與類中的成員變數和成員函式對應。
obj = MyClasss() # 建立類的一個例項(物件)
通過物件來呼叫屬性和方法

類的屬性

類的屬性按使用範圍分為公有屬性和私有屬性,類的屬性範圍取決於屬性的名稱。

  • 公有屬性:在類中和類外都能呼叫的屬性。
  • 私有屬性:不能在類外及被類以外的函式呼叫的屬性。
    定義方式:以“__”雙下劃線開始的成員變數就是私有屬性。
    可以通過instance._classname__attribute方式訪問
    如ren._People__age ren為物件名,People為類名,__age為私有屬性名。不建議這樣使用,建議通過類的方法呼叫私有屬性。
  • 內建屬性:由系統在定義類的時候預設新增的,由前後雙下劃線構成,如__dict__、__module__。
#!/usr/bin/python
# -*- coding: utf-8 -*-
class People(object):            #定義一個類
    color = "yellow"             #類的公有屬性
    __age = 30                   #類的私有屬性
    def think(self):             #類的方法
        self.color = "black"     #在方法中修改類屬性
        print "I am a %s" % self.color
        print "I am a thinker"
        print self.__age
ren = People()                   #例項化類
print ren.color                  #列印類的屬性
ren.think()                      #執行類的方法
ren.color = "write"              #修改物件的屬性值
print ren.color
print ren.__dict__               #列印物件的內建屬性
print People.color               #列印類的公有屬性
print People.__dict__            #列印類的內建方法
類的方法

方法的定義和函式一樣,但需要self作為第一個引數。
類的方法分為:

  • 公有方法:在類中和類外都能呼叫的方法。
  • 私有方法:不能被類的外部呼叫,在方法前面加上“__”雙下劃線就是私有方法。
    self引數:用於區分函式和類的方法(必須有一個self),self引數表示執行物件本身
  • 類方法:被classmethod()函式處理過的函式,能被類所呼叫,也能被物件所呼叫(是繼承關係)
  • 靜態方法:相當於“全域性函式”,可以被類直接呼叫,可以被所有例項化物件共享,通過staticmethod()定義,靜態方法沒有self引數。

例子:

#!/usr/bin/python
# -*- coding: utf-8 -*-
class People(object):            #定義一個類
    color = "yellow"             #類的公有屬性
    __age = 30                   #類的私有屬性
    def think(self):             #類的公有方法
        self.color = "black"     #在方法中修改類屬性
        print "I am a %s" % self.color
        print "I am a thinker"
        print self.__age
    def __talk(self):            #類的私有方法
        print "I am talking with Tom."
    def work(self):
        print "Working..."
        self.__talk()            #呼叫類的私有方法
    @classmethod                 #裝飾器
    def test(self):              #加上上邊的裝飾器變成類方法
        print "this is class method"
    @staticmethod                #裝飾器
    def test1():                 #加上上邊裝飾器變為靜態方法,沒有self引數
        print "this is static method"
jack = People()
jack.work()                      #物件呼叫類中的私有方法 
jack.test()                      #物件呼叫類方法
People.test()                    #類呼叫類方法
People.test1()                   #類呼叫靜態方法,物件也可以直接呼叫

注:python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是一個函式,使用python裝飾器的好處就是在不用更改原函式的程式碼前提下給函式增加新的功能。