国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python入門學(xué)習(xí)(八)

Jaden / 491人閱讀

摘要:面向?qū)ο箢悓ο髮嵗愂且粋€抽象的存在實例是真實存在的類對象是類的實例好比說門就是一個類我的屋門就是門的一個實例我的屋門是白顏色的而且打開和關(guān)閉時會發(fā)出聲響不管是顏色還是打開和關(guān)閉都是類賦予的屬性和行為至于白顏色和打開和關(guān)閉時發(fā)出的聲響是這個

面向?qū)ο驩OP

類(Class)

對象(Object)

實例(Instance)

類:  是一個抽象的存在

實例: 是真實存在的類

對象: 是類的實例

好比說 就是一個, 我的 屋門 就是門的一個實例. 我的屋門白顏色的, 而且打開和關(guān)閉時會發(fā)出聲響.

不管是 顏色, 還是打開關(guān)閉 都是賦予的屬性和行為. 至于白顏色打開和關(guān)閉時發(fā)出的聲響是這個實例的具體表現(xiàn).

對象: 包括了 類的屬性行為, 還有實例所都有的具體表現(xiàn)形式(比如: 白顏色, 打開和關(guān)閉時發(fā)出聲響)


在面向?qū)ο蟮某绦蛟O(shè)計中, 首先要抽離出實體, 以及這個實體所擁有的屬性和行為(方法).

面向?qū)ο蟮娜筇攸c: 封裝, 繼承, 多態(tài)

封裝
class Animal(object):
    def __init__(self, args):
        super(Animal, self).__init__()
        self.__name = args.get("name")
        self.age = args.get("age")

    def call(self):
        print("Animal(name:{0}, age:{1}) Call....".format(self.__name, self.age));

    def setAnimalInfo(self, *, name, age):
        self.__name = name
        self.age = age

    def getAnimalInfo(self):
        return {"name": self.__name, "age": self.age}

    def __str__(self):  # 重寫父類方法
        return "Animal(name:{0}, age:{1})".format(self.__name, self.age)


pig = Animal({})
pig.setAnimalInfo(name="tom", age=2)
pig.call()
pig.age = 3
print(pig.age)
print(pig._Animal__name)  # 不建議這樣訪問
# print(pig.__name) # AttributeError: "Animal" object has no attribute "__name"
pig.__name = "jack"  # 這么寫是錯誤的, 雖然Python沒有限制
print(pig.__name)  # 實際上就是給 pig 綁了一個新的屬性
pig.call()

所謂封裝, 就是將類的屬性設(shè)為私有, 然后開放屬性的get, set方法. 這樣會提高程序的健壯性(比如set時, 驗證實參是否合法)

因為構(gòu)造方法(__init__(self, args))中, 存在必選參數(shù), 所以在初始化實例時 pig = Animal({})

實際上私有屬性, 在實例化對象時, 就已經(jīng)改了變量名, 所以才有的 AttributeError: "Animal" object has no attribute "__name" 的錯誤信息

pig.__name = "jack" 就像當(dāng)于給pig實例, 重新綁定了新的屬性(這樣寫雖然語法沒有錯, 但不建議這樣寫. 就像某件事, 沒有觸犯法律, 但受到道德的譴責(zé).)

繼承

class Animal(object) Animal 繼承自 object,

class Dog(Animal):
    def __init__(self, args):
        super(Dog, self).__init__(args)

    def call(self):
        # print("Dog(name:{0}, age:{1}) wang....".format(super().__name, super.age));
        print("Dog(name:{0}, age:{1}) wang....".format(super(Dog, self).getAnimalInfo().get("name"),
                                                       super(Dog, self).getAnimalInfo().get("age")));

    def __str__(self):  # 重寫父類方法
        # return "Dog(name:{0}, age:{1})".format(super().__name, super.age)
        return "Dog(name:{0}, age:{1})".format(super(Dog, self).getAnimalInfo().get("name"),
                                               super(Dog, self).getAnimalInfo().get("age"))


class Cat(Animal):
    def __init__(self, args):
        super(Cat, self).__init__(args)

    def call(self):
        # print("Cat(name:{0}, age:{1}) miao....".format(self.__name, self.age));
        print("Cat(name:{0}, age:{1}) miao....".format(super(Cat, self).getAnimalInfo().get("name"),
                                                       super(Cat, self).getAnimalInfo().get("age")));

    def __str__(self):  # 重寫父類方法
        # return "Cat(name:{0}, age:{1})".format(self.__name, self.age)
        return "Cat(name:{0}, age:{1})".format(super(Cat, self).getAnimalInfo().get("name"),
                                               super(Cat, self).getAnimalInfo().get("age"))


dog = Dog({"name": "lucy", "age": 2})
cat = Cat({"name":"lola", "age":1})

dog.call()
cat.call()

print("pig is Animal", isinstance(pig, Animal))
print("dog is Dog", isinstance(dog, Dog))
print("cat is Cat", isinstance(cat, Cat))
print("dog is Animal", isinstance(dog, Animal))
print("cat is Animal", isinstance(cat, Animal))

在子類中, 獲取父類的引用 super(Dog, self). 而在子類中要想拿到父類的屬性, 只能通過父類中提供的開放接口, 來實現(xiàn)了.

多態(tài)

從上面的程序中可以看出, Animal重寫了他的父類的__str__方法, Cat和Dog也重寫了這個方法. 有繼承方法重寫, 自然就有多態(tài)了.

def getAnimal(animal):
    print(animal)

getAnimal(pig)
getAnimal(dog)
getAnimal(cat)

# Animal(name:tom, age:3)
# Dog(name:lucy, age:2)
# Cat(name:lola, age:1)

雖傳入的都是 Animal類, 但執(zhí)行的卻有著不同的行為. 這就是多態(tài)(^_^)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41267.html

相關(guān)文章

  • 零基礎(chǔ)如何學(xué)爬蟲技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...

    KunMinX 評論0 收藏0
  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評論0 收藏0
  • GitChat · Python | 零基礎(chǔ)小白如何入門 Python 編程

    摘要:來自作者鍋蜀黍背景本文主要根據(jù)作者個月以來對于人的零基礎(chǔ)教學(xué)經(jīng)驗總結(jié)而出,適合零基礎(chǔ)負基礎(chǔ)學(xué)習(xí)編程語言的同學(xué)閱讀。學(xué)生黨和工作黨的比例是。基礎(chǔ)幾乎都沒有。顯然這兩個人的學(xué)習(xí)方式勢必是不一樣的。而不是媽的如何又報錯了。 來自 GitChat 作者:鍋蜀黍 背景 本文主要根據(jù)作者2個月以來對于 300 人的零基礎(chǔ)python教學(xué)經(jīng)驗總結(jié)而出,適合零基礎(chǔ)、負基礎(chǔ)學(xué)習(xí) python 編程語言...

    NikoManiac 評論0 收藏0
  • 干貨 | 學(xué)習(xí)Python的正確姿勢

    摘要:勤學(xué)學(xué)習(xí)效率與效果取決于執(zhí)行力。這一步學(xué)習(xí)的正確姿勢是在實踐操作中發(fā)掘問題,然后帶著問題找答案。拆分任務(wù)將目標(biāo)分解成具體可執(zhí)行的學(xué)習(xí)任務(wù)。勤學(xué)強大的執(zhí)行力是學(xué)習(xí)的根本保障。分享復(fù)述檢驗學(xué)習(xí)成果,提高學(xué)習(xí)效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段時間和大家一起分享了一篇關(guān)于學(xué)習(xí)方法內(nèi)容《大牛...

    Thanatos 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<