3.0 類的內建方法 3.1 類的繼承(1) 3.2 類的繼承(2)
3.0 類的內建方法
所謂內部類,就是在類的內部定義的類,主要目的是為了更好的抽象現實世界。
比如,汽車是一個類,汽車的地盤,輪胎也可以抽象為類,將其定義到汽車的類中,則形成內部類,更好的描述汽車類,因為底盤、輪胎是汽車的一部分
建立內部類的方法和建立類的方法很相似
內部類的例項化方法
方法1:直接使用外部類呼叫內部類
object_name = outclass_name.inclass_name()
class People(object): class Chinese(object): name = "I'm a Chinese" me = People.Chinese() print me.name ---------- I'm a Chinese
方法2:先對外部類進行例項化,然後再例項化內部類
out_name = outclass_name() in_name = out_name.incalss_name() in_name.method()
class People(object):
class Chinese(object):
name = "I'm a Chinese"
me = People.Chinese()
print People.Chinese.name
----------
I'm a Chinese
魔術方法
str(self)
class A(object): def __str__(self): return "123" a = A() print a \\類例項化的時候就會執行,不需要額外呼叫
建構函式與解構函式
建構函式
用於初始化類的內部狀態,python提供的建構函式是_init_()
_init_()方法時可選的,如果不提供,python會給出一個預設的__init__方法
解構函式:
用於釋放物件佔用的資源,python提供的解構函式是 _del_():
_del_()也是可選的,如果不提供,則python會在後臺提供預設解構函式
垃圾回收機制
python採用垃圾回收機制來清理不再使用的物件;python提供gc模組釋放不再使用的物件
python採用“引用計數”的演算法方式來回收,即:當某個物件在作用域內不再被其他物件引用的時候,python就自動清除物件;
gc模組的collect()可以一次性收集所有待處理的物件(gc.collect)
import gc
print gc.collect
3.1-3.2 類的繼承
繼承是面向物件的重要特徵之一;
繼承關係:繼承是相對兩個類而言的父子關係,子類繼承了父類的所有共有屬性和方法
繼承實現了程式碼重用
繼承可以重寫已存在的資料和行為,減少程式碼的重複編寫,python在類名後面使用一對括號來表示繼承關係,括號中的類即為父類。
class MyClass(ParentClass):
class Parent(object):
p1 = 1
def func(self):
print "Parents"
class Child(Parent):
pass
c = Child()
c.func()
------
Patents
如果父類定義了__init__方法,子類必須顯式呼叫父類的__init_方法:
ParentClass.__init__(self,[args...])
舉例:
class Parent(object):
def __init__(self,n):
pass
def func(self):
pass
class Child(Parent): def init(self): Parent.init(self,"child")
如果子類需要擴充套件父類的行為,可以新增__init__方法的引數。
super函式
可以繼承類的繼承父類的方法和屬性
class A(object):
def __init__(self):
print "A"
print "AA"
class B(object):
def __init__(self):
print "B"
super(B,self).__init__()
print "BB"
b = B()
多重繼承
Python支援多重繼承,一個類可以繼承多個父類
class MyClass(Patent1,Parent2...)
注意,當父類中出現多個自定義的__init__方法時,多重繼承只執行第一個類的__init__方法,其他的不執行