Python2.7 學習筆記 (三)—— 類,繼承,重載

16:56 2012-3-9
聲明:以下代碼都是在Python2.7+Winxp中執行通過

[面向對象]
1.類的定義
#-*-coding:utf-8-*-
class student:
name = ''   #定義類的公有屬性,可直接訪問
age =0

class human :
sex =''
height=0

2.類的繼承
class student(human):  #只能繼承父類的共有屬性和共有方法,私有的屬性和方法不能繼承

3.類的使用
#-*-coding:utf-8-*-
tom = student()  #實例化student類
tom.name='tome'
print tom.name
print tom.age

4.類的變量和方法
__開始的變量,是私有變量,只有在類內部可以訪問,要通過self.__name 訪問,相當於private
可以通過函數來取得和修改私有變量
其他變量,都屬於公有變量,相當於public

4.1類的私有變量
#-*-coding:utf-8-*-
class human:
name ='human'
age =18
__sex='male'  # 私有變量

def getSex(self):   
return self.__sex

def setSex(self,sex): #self必須是第一個參數
self.__sex=sex

class student(human):
grade =0 

print human.name
print student.grade
print student.age  #繼承自父類human
#print human.__sex     #這裏會報錯,私有變量不能直接訪問
h= human()
print h.getSex()
h.setSex('female') #設置sex 爲female
print h.getSex()

4.2類的私有方法 
#-*-coding:utf-8-*-
class human:
name ='human'
age =18
__sex='male'  # 私有變量

def __privateMethod(self): #類的私有方法
print "I am a class private method" 

def callPrivateMethod(self):  #調用類私有方法,只有類內部可以調用
self.__privateMethod() #調用的時候,需要加self前綴

class student(human):
grade =0 

h= human()
h.callPrivateMethod()

4.3.類的專有方法 Special Methods
__init__ 構造函數,生成對象時被調用
__del__ 析構函數,釋放對象時被調用
__add__ 加暈死
__mul__ 乘運算
__cmp__ 比較運算
__repr__ 打印,轉換
__setitem__ 按照索引賦值
__getitem__ 按照索引取值
__len__ 獲得長度
__call__ 函數調用

#-*-coding:utf-8-*-
class human:
__name=''

__age=0


def __init__(self,name,age):  #構造函數
self.__name=name
self.__age=age

def show(self): # def 和class 之間要有縮進
print "name is:"+self.__name
print "age is:"+ str(self.__age) #數字記得要轉換成字符串
tom = human("tom",18);
tom.show();

5.類的多重繼承
class student (human,father,superman):
基礎順序從左往右,子類的變量和方法會覆蓋父類的同名變量和方法

#-*-coding:utf-8-*-
class human:
name ='human'
nickname='h'
def show(self): #def 和class 之間要有縮進
print "name is:"+self.name
print "nickname:"+self.nickname

class teacher:
name ='teacher'
nickname='t'
def show(self): #def 和class 之間要有縮進
print "name is:"+self.name
print "nickname:"+self.nickname

class boy(human,teacher): #繼承順序從左往右:human,teacher
nickname="boy"; #父類裏也有nickname,但是這個值會被子類覆蓋掉

class girl(teacher,human): #繼承順序從左往右:teacher,human
nickname="girl";

b = boy();
b.show();#輸出 name is human ,nickname is boy

g = girl();
g.show();#輸出 name is teacher,nickname is girl

6.重載 
子類中,使用和父類同樣的方法名,就可以覆蓋父類的方法
#-*-coding:utf-8-*-
#重載
class human:
def show(self): #def 和class 之間要有縮進
print "name is father"

class boy(human):
def show(self): #def 和class 之間要有縮進
print "name is boy"

b = boy();
b.show();#輸出 name is boy 

7.運算符重載
python中的運算符,其實也是對應相應的方法,所以,運算符重載,就是相應的方法重載
瞭解這個之後,運算符重載就和普通重載沒什麼區別
+ __add__
- __sub__
* __mul__
/ __div__
% __mod__
** __pow__

#運算符重載
class  mylist:
__params =[]
def __init__(self,*args): #重載__init__方法, *args爲可變參數
self.__params=[]  #初始化
for arg in args:
self.__params.append(arg) #把輸入參數都存到params裏


def __add__(self,n): # 重載__add__方法; n 表示被加的那個數
for i in range(0,len(self.__params)):
self.__params[i] +=n;  #params裏的數都加1
def show(self):
print self.__params

list = mylist(1,2,3,4,5)
list+ 1      #1就相當於__add__(self,n) 裏的n
list.show()  #輸出[2.3,4,5,6]

18:38 2012-3-12
END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章