Python類和對象

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]))

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