1. 程式人生 > >3.0 類的內建方法 3.1 類的繼承(1) 3.2 類的繼承(2)

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__方法,其他的不執行