Python是一種面嚮對象語言,有其三大特性,封裝,繼承,多態
一.
1.類
具有相同屬性和行爲特徵的對象的集合
class Car:
name="car" #對象
#初始化方法
def __init__(self,brand=None):
self.brand=brand
def printCar(self):
print(self)
2.對象
對象是類的實例,具有類的屬性和方法
c=Car("奧迪") #實例化對象
c.printCar() #調用方法
3.創建對象方法
def __new__(cls, *args, **kwargs):
print("創建對象")
return object.__new__(cls,args)
在Python中,在創建對象的時候調用__new__方法,並執行初始化__init__方法
如果,初始化方法有參數,__new__方法return時,args必須也對應加上
4.轉化字符串方法(ToString):
輸出時,默認調用__str__方法
def __str__(self):
return "這輛%s的品牌是%s"%(self.name,self.brand)
5.自動銷燬方法(析構)
在使用del 刪除對象或對象使用完畢時,垃圾回收自動銷燬對象
def __del__(self):
print("對象銷燬了")
二.繼承(Python支持多繼承)
1.語法: class Student(object)
繼承條件下調用父類的屬性或方法:
1>父類類名.屬性
2>super([父類類名,self]).__init__(self,屬性)
3>父類類名.__init__(屬性)
2.多繼承
class C(A,B)
查找順序: 參數A寫在前,就先從A類中查找屬性或方法,如果A中有,就執行A的屬性或方法
如果A中沒有,就去B中找,執行B的
拓展:
首先,B和C兩個類都必須繼承自D,A類又繼承自B、C,那麼執行A的屬性或方法會涉及到
廣度優先和深度優先
當聲明D類時,如果繼承Object,子類則爲新生類,反之,爲經典類
當類爲經典類是,按照深度優先
當類爲新生類時,按照廣度優先
課堂案例:
1.單例模式
#單例
class SingleObject:
__instance=None
def __new__(cls, *args, **kwargs):
if cls.__instance ==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
a=SingleObject()
b=SingleObject()
print(id(a),id(b))
2.對象排序
#對象排序
class Car:
def __init__(self,brand=None,price=None):
self.brand=brand
self.price=price
def __str__(self):
return "汽車的品牌{0},價格{1}".format(self.brand,self.price)
list=[Car('寶馬',3000000),Car('奧迪',4000000),Car('奔馳',3500000),Car('英菲尼迪',100000000)]
list.sort(key=lambda x:x.brand.encode("gbk"))
for i in list:
print(i)
print("==========按價格排序=========")
list.sort(key=lambda x:x.price)
for i in list:
print(i)
key = lambda x: x.price
print(key(list[1]))