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父類