1. 程式人生 > >python自動化運維學習第十三天--類的內建方法和繼承

python自動化運維學習第十三天--類的內建方法和繼承

內部類

所謂內部類就是在類的內部定義的類,主要目的是為了更好的抽象現實世界。
比如,汽車是個類,汽車的底盤、輪胎也可以抽象為類,將其定義到汽車類中則形成內部類,更好的描述汽車類,因為底盤、輪胎都是汽車的一部分。
內部類的例項化
方法1:直接使用外部類呼叫內部類
object_name = outclass_name.inclass_name()
採用外部類.內部類來例項化
方法2:先對外部類進行例項化,然後再例項化內部類

out_name = outclass_name()          #例項化外部類
in_name = out_name.inclass_name()
#例項化內部類 in_name.method() #呼叫內部類的方法 outclass_name.inclass_name.variable #直接呼叫內部屬性

類的內建方法

類的內建方法也叫做魔術方法
內建方法為以__開頭,以__結尾的方法
str(self):用於類被例項化後,直接列印例項化物件時,顯示的提示資訊,不能用print,必須要用return

def __str__(self):
    return "this is a str method"

建構函式和解構函式

  • 建構函式:用於初始化類的內部狀態,python提供的建構函式是__init__();這個函式是可選的,如果不提供,python預設會提供__init__函式。
class Car(object):
    color = 'write'
    
    def __init__(self,cl):    #只在類例項化時才會執行,可以新增引數
        #self.color = 'black'
        self.color = cl       #例項化時接收引數修改color屬性值
        self.run()            #例項化時執行類的方法
        
    def run(self):
        print "Running..."
        
#audi = Car()
audi =
Car('red') #例項化自動執行了run方法 print Car.color #輸出為write #print audi.color #輸出為black print audi.color #輸出為red
  • 解構函式:用於釋放物件佔用的資源,python提供的解構函式是__del__();這個函式也是可選的,如果不提供,python預設會提供析構函,在指令碼最後執行。
def __del__(self):
    print "this is del method"

垃圾回收機制
python採用垃圾回收機制來清理不再使用的物件,提供gc模組釋放不再使用的物件。
python採用“引用計數”的演算法方式來處理回收,即:當某個物件在其作用域內不再被其他物件引用時,python會自動清除物件。
gc模組的collect()方法可以一次性收集所有待處理的物件。

繼承

繼承是面向物件的重要特性之一。
繼承是相對兩個類而言的父子關係,子類繼承父類的所有公有屬性和方法。
繼承實現了程式碼複用。
繼承可以重用已經存在的資料和行為,減少程式碼的重複編寫。Python在類名後使用一對括號來表示繼承關係,括號中的類即為父類。
class MyClass(ParentClass)
如果父類定義了__init__方法,子類必須顯式呼叫父類的__init__方法。
ParentClass.__init__(self,[args...])
如果子類需要擴充套件父類的行為,可以新增__init__方法的引數。

class Car(object):             #新式類
#class Car:                    #舊式類
    color = "write"
    
    def __init__(self,pw):
        print "init..."
        self.power = pw
        
    def run(self):
        print "Car is running..."
        
class Wagon(Car):
    def __init__(self):
#        Car.__init__(self,200)              #顯式呼叫父類建構函式
        super(Wagon, self).__init__(200)     #使用super函式,作用同上,只能在新式類中使用

    def run(self):
        print "Wagon is running..."
        
audi = Wagon()
print audi.power
audi.run()                            #執行子類的方法
多重繼承

Python支援多重繼承,即一個類可以繼承多個父類
class ClassName(Parent_c1, Parent_c2,...)
注意:當父類中出現多個自定義的__init__方法時,多重繼承只執行第一個類的__init__方法,其他不執行。

class Car(object):             #新式類
    color = "write"
    
    def __init__(self):
        print "init..."
        self.power = 200
        
    def run(self):
        print "%s Car is running..." % self.color

class Machine(object):
    color = "green"
    
    def __init__(self):
        self.power = 150

    def start(self):
        print "Machine is starting, power is %s" % self.power
        
class Wagon(Car, Machine):
    def __init__(self):
        Machine.__init__(self)    #指定執行的父類建構函式,預設執行第一個父類的建構函式
        
audi = Wagon()
audi.run()          #run方法呼叫父類Car中的color屬性,color預設為第一個父類Car的值
audi.start()        #start方法呼叫父類Machine中的power屬性,power屬性在建構函式中,建構函式繼承自Machine父類