1. 程式人生 > >類,對象 ,封裝,實例變量,類變量,繼承,多態

類,對象 ,封裝,實例變量,類變量,繼承,多態

方式 clas 繼承 bsp pos 自動 通過 特性 pri

類:對一類事物的抽象。例如:人 ,狗,貓,鳥。。。這樣是一大類的概括。講人,可以指很多人,狗也可以分很多種狗

對象:具體的某個類的實例。就想 張三--》指的就是人這個類下面的具體的某一個實例。泰迪 就是狗這個類下面的某個實例

面向對象的三個特性:

  封裝:就是將屬性給封裝起來,這個是你特有性質,你可以讓外界知道,也可以不讓外界知道

例如:

  

# Author:zylong
class Person:
    #人都有性別,姓名,身高,體重
    def __init__(self,name,sex,heigh,weigh,age):
        #這些屬性可以直接被外界訪問的
        self.name = name
        self.sex 
= sex self.heigh = heigh self.weigh = weigh #這些屬性只有類提供方法,才能被訪問 self.__age = age def getAge(self): return self.__age #私有方法也是一樣的,就是定義的時候以__開頭,外界是不能直接方法的 #實例一個類 p1 = Person("張三","",170,60,22) #這就創建了一個張三的實例,這裏要清楚 類實例的過程.屬性和方法的區別 #封裝:這時候就可以看出,將 姓名,性別,身高,體重,年紀 封裝到p1中
#當我想知道p1這個人的age的時候 #print(p1.__age)#會提示沒有這個屬性,是因為這個屬性不能直接被外界訪問,只鞥通過類提供的getAge這個方法來獲取 print(p1.getAge())#這樣就獲取到 年紀

類屬性和實例屬性:

#類屬性和實例屬性
class Dog:

    #這個就是類屬性
    legNums = 4

    def __init__(self,sex,heigh,weigh,age):
        #這裏面的就是實例屬性
        self.sex = sex
        self.heigh = heigh
        self.weigh 
= weigh self.age = age d1 = Dog("",50,30,3) print(d1.legNums)#這裏顯示的是4 #如果d1想改變它的腿數 d1.legNums = 3 print(d1.legNums)#這樣就變成了3 #這裏要明白一點,這裏改變的不是類變量的值,這裏是給d1自己增加了一個屬性,legNums = 3,。這裏要清楚類實例的過程 #訪問實例屬性的時候,先訪問自己的實例中是否有,如果沒有再去類中找是否有,如果還沒有就拋異常
#如果類屬性,是集合列表等,這裏要明白,列表,集合等存儲的方式。其實類中保存的是對列表的引用,其他地方改變列表的時候,類中的這個列表就會改變

繼承

# Author:zylong
#這裏要知道一點:
class Person:

    def __init__(self,name,age):
        #構造器,類通過這個來實例這個類。這個跟實例屬性一樣,如果本類有,就不會去找父類的,
        # 如果本類有__init__方法,就不會去找父類的,可以再這裏自己調用父類的__init__方法
        pass

class WhitePerson(Person):

    def __init__(self,name,age):
        #通過這樣的方式,python會自動搜素它的父類
        super(WhitePerson,self).__init__(name,age)

#python 2.x是 深度優先 3以後都是廣度優先

多態:一種接口,多種實現

# Author:zylong
#python中多態--一個接口多種實現

class Person(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def objRun(obj):
        print("%s is run"%obj.name)
class WhitePerson(Person):
    pass

class BlackPerson(Person):
    pass

p1 = WhitePerson("zhang",20)
p2 = WhitePerson("yu",21)

Person.objRun(p1)
Person.objRun(p2)

類,對象 ,封裝,實例變量,類變量,繼承,多態