国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python爬蟲(chóng)與數(shù)據(jù)分析】面向?qū)ο笤O(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了【Python爬蟲(chóng)與數(shù)據(jù)分析】面向?qū)ο笤O(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、類(lèi)的構(gòu)建與繼承

二、多繼承

三、鉆石繼承

四、多態(tài)

五、鴨子類(lèi)型

六、類(lèi)的組合

七、類(lèi)的私有屬性和方法

八、魔法方法

九、單例模式


一、類(lèi)的構(gòu)建與繼承

類(lèi)的屬性包含成員變量成員函數(shù)(方法)

成員函數(shù)又分為靜態(tài)方法、魔法方法普通成員方法

靜態(tài)方法可以直接被類(lèi)調(diào)用,也可以被類(lèi)對(duì)象調(diào)用

魔法方法是類(lèi)的默認(rèn)方法,我們可以自定義魔法方法

子類(lèi)繼承父類(lèi),可以對(duì)相同函數(shù)名的函數(shù)進(jìn)行重寫(xiě)

class Person:       # Person(object)
    name = '沒(méi)有名字'
    age = '未出生'
    sex = '不知道'          # 靜態(tài)屬性

    @staticmethod       # 靜態(tài)方法
    def print_name():
        print(f'{Person.name}')

    # 實(shí)例屬性方法(魔法方法)
    def __init__(self, name='無(wú)名氏', age=0, sex='未知'):    # 初始化無(wú)返回值
        self.name = name
        self.age = age
        self.sex = sex

    def printName(self):
        print(f'我的名字是: {self.name}')
    def printAge(self):
        print(f'我的年齡是: {self.age}')
    def printSex(self):
        print(f'我的性別是: {self.sex}')


# 繼承與Person的子類(lèi)
class Son(Person):
    def printName(self):        # 局部重寫(xiě)
        print(f'我有自己的名字, 叫做{self.name}:')
    def __init__(self, name='子女', age=1):   # 局部繼承
        Person.__init__(self)
        self.name = name
        self.age = age


Person.print_name()         # 類(lèi)直接調(diào)用靜態(tài)方法

girl_friend = Person()
girl_friend.print_name()    # 類(lèi)對(duì)象調(diào)用靜態(tài)方法
print(girl_friend.name)
girl_friend.printName()
girl_friend.printAge()
girl_friend.printSex()

friend = Person('蘇銘', 21, '男')
friend.print_name()
print(friend.name)
friend.printName()
friend.printAge()
friend.printSex()

print(Son.name)
me = Son()
me.printName()
me.printAge()
me.printSex()

二、多繼承

一個(gè)子類(lèi)可以繼承于多個(gè)父類(lèi),誰(shuí)排前面誰(shuí)優(yōu)先繼承,重名方法的繼承需要考慮優(yōu)先級(jí),不重名方法的繼承不需要考慮優(yōu)先級(jí)(都繼承)。

class Master:
    def __init__(self):
        self.kongfu = '傳統(tǒng)奶茶配方'
    def make_cake(self):
        print(f'[傳統(tǒng)] 按照{(diào)self.kongfu}制作了一杯奶茶...')
    def smoke(self):
        print('抽個(gè)煙')

class School:
    def __init__(self):
        self.kongfu = '現(xiàn)代奶茶配方'
    def make_cake(self):
        print(f'[現(xiàn)代] 按照{(diào)self.kongfu}制作了一杯奶茶...')
    def drink(self):
        print('躲在廁所里喝酒')

# 多繼承
class Prentice(Master, School):     # 誰(shuí)排前面,誰(shuí)優(yōu)先繼承
    pass

# 子類(lèi)的魔法屬性__mro__決定了屬性和方法的優(yōu)先級(jí)
print(Prentice.__mro__)

me = Prentice()
print(me.kongfu)
me.make_cake()
me.smoke()
me.drink()      # 不重名的不考慮順序問(wèn)題

三、鉆石繼承

如果子類(lèi)繼承自兩個(gè)單獨(dú)的超類(lèi),而那兩個(gè)超類(lèi)又繼承自同一個(gè)公共基類(lèi),那么就構(gòu)成了鉆石繼承體系。這種繼承體系很像豎立的菱形,也稱作菱形繼承。

super()方法保證公共父類(lèi)只被執(zhí)行一次

class A:
    def __init__(self):
        print('進(jìn)入A')
        print('離開(kāi)A')

class B(A):
    def __init__(self):
        print('進(jìn)入B')
        super().__init__()
        print('離開(kāi)B')

class C(A):
    def __init__(self):
        print('進(jìn)入C')
        super().__init__()
        print('離開(kāi)C')

class D(B, C):
    def __init__(self):
        print('進(jìn)入D')
        super().__init__()
        print('離開(kāi)D')

D()

四、多態(tài)

多態(tài): 不同對(duì)象在調(diào)用相同方法時(shí), 呈現(xiàn)不同狀態(tài)

isinstance()方法可以判斷一個(gè)對(duì)象是否屬于某一個(gè)類(lèi)

class Animal():
    def eat(self):
        print('動(dòng)物吃飯了')

class Dog(Animal):
    def eat(self):
        print('小狗吃飯了')

class Cat(Animal):
    def eat(self):
        print('小貓吃飯了')

a = Animal()
b = Dog()
c = Cat()

print(isinstance(a, Animal))    # True 判斷 a 是否輸入 Animal類(lèi)
print(isinstance(b, Dog))       # True
print(isinstance(c, Cat))       # True
print()
print(isinstance(b, Animal))    # True
print(isinstance(c, Animal))    # True 同一個(gè)對(duì)象可以屬于不同的類(lèi)
print()
print(isinstance(a, Dog))       # False 父類(lèi)對(duì)象不屬于子類(lèi)
print()

def eat_eat(animal):
    animal.eat()

_list = [Animal, Dog, Cat]
for animal in _list:
    animal().eat()

五、鴨子類(lèi)型

鴨子類(lèi)型(英語(yǔ):duck typing)是動(dòng)態(tài)類(lèi)型的一種風(fēng)格。在這種風(fēng)格中,一個(gè)對(duì)象有效的語(yǔ)義,不是由繼承自特定的類(lèi)或?qū)崿F(xiàn)特定的接口,而是由當(dāng)前方法和屬性的集合決定。
“當(dāng)看到一只鳥(niǎo)走起來(lái)像鴨子、游泳起來(lái)像鴨子、叫起來(lái)也像鴨子,那么這只鳥(niǎo)就可以被稱為鴨子。”
我們并不關(guān)心對(duì)象是什么類(lèi)型,到底是不是鴨子,只關(guān)心行為。

class Duck:
    def quack(self):
        print('嘎嘎嘎, 我是一只可達(dá)鴨')
    def feathers(self):
        print('我有黃色的羽毛')

class Person:
    def quack(self):
        print('我也會(huì)嘎嘎嘎, 但我是一個(gè)人')
    def feathers(self):
        print('我沒(méi)有羽毛')

def in_the_poor(d):
    d.quack()
    d.feathers()

duck = Duck()
person = Person()
in_the_poor(duck)
in_the_poor(person)

六、類(lèi)的組合

類(lèi)的組合就是一個(gè)對(duì)象具有一個(gè)屬性,這個(gè)屬性的指是另外一個(gè)類(lèi)的對(duì)象。

# 烏龜類(lèi)
class Turtle:
    def __init__(self, x):
        self.num = x

# 魚(yú)類(lèi)
class Fish:
    def __init__(self, x):
        self.num = x

# 池塘類(lèi)
class Pool:
    def __init__(self, x, y):
        #烏龜類(lèi)進(jìn)來(lái)
        self.turtle = Turtle(x)
        #魚(yú)類(lèi)進(jìn)來(lái)
        self.fish = Fish(y)
    def print_num(self):
        print(f'池塘里有{self.turtle.num}只烏龜, 有{self.fish.num}只魚(yú)')

p =  Pool(4, 10)
p.print_num()

七、類(lèi)的私有屬性和方法

私有權(quán)限:在屬性名和方法名 前面 加上兩個(gè)下劃線 __ 類(lèi)的私有屬性 和 私有方法,都不能通過(guò)對(duì)象直接訪問(wèn),但是可以在本類(lèi)內(nèi)部訪問(wèn);

類(lèi)的私有屬性 和 私有方法,都不會(huì)被子類(lèi)繼承,子類(lèi)也無(wú)法訪問(wèn); 私有屬性 和 私有方法 往往用來(lái)處理類(lèi)的內(nèi)部事情,不通過(guò)對(duì)象處理,起到安全作用。

class People(object):
    def __init__(self, password):
        self.__password = password      # 變量前面有兩個(gè)下劃線, 有私有屬性, 外部不可直接訪問(wèn)

    def getPassword(self):
        return self.__password      # 類(lèi)的內(nèi)部可調(diào)用私有屬性

    def setPassword(self, new_password):
        if len(new_password) >= 6:
            self.__password = new_password
        else:
            print('密碼長(zhǎng)度需大于等于5')

me = People('123456')
print(me.getPassword())
me.setPassword('654321')
print(me.getPassword())

八、魔法方法

? ? ? Python中的魔法方法(Magic Methods),也稱為雙下劃線方法(Dunder Methods),是特殊方法,其名稱以雙下劃線開(kāi)頭和結(jié)尾,例如 __init__、__str__、__add__ 等。這些方法提供了一種使Python對(duì)象能夠使用內(nèi)置函數(shù)和語(yǔ)言結(jié)構(gòu)的方式。

class Obj(int):
    def __init__(self, num):
        self.num = num

    # 自定義類(lèi)對(duì)象的基本計(jì)算方法
    def __add__(self, other):
        return self.num + other + 1    # 這里的運(yùn)算符繼承于父類(lèi)
    def __sub__(self, other):
        return self.num - other + 1
    def __mul__(self, other):
        return self.num * other + 1
    def __truediv__(self, other):
        return self.num / other + 1
    def __floordiv__(self, other):
        return self.num // other + 1

    # __str__ 是一個(gè)顯示對(duì)象信息的魔法方法
    # 這個(gè)方法需要return一個(gè)數(shù)據(jù), 并且只有self一個(gè)參數(shù)
    # 當(dāng)在類(lèi)的外部print(對(duì)象), 則打印這個(gè)返回的數(shù)據(jù)
    def __str__(self):
        return (f'這個(gè)數(shù)是{self.num}')

    # __getattr__(self)當(dāng)訪問(wèn)一個(gè)不存在的對(duì)象時(shí), 不報(bào)錯(cuò)
    # 是一個(gè)防報(bào)錯(cuò)的異常捕獲機(jī)制
    def __getattr__(self, name):
        return (f'{name}屬性不存在')

a = Obj(3)
b = Obj(5)
print(a)
print(type(a))
print(a.x)
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)



class String(str):
    def __init__(self, name):
        self.name = name

    # __len__(self) 可自定義長(zhǎng)度的計(jì)算方法
    def __len__(self):
        return len(self.name) - 1

    def __str__(self):
        return f'這個(gè)字符串是{self.name}'

s = String('hello')
print(s)
print(len('hello'))
print(len(s))

九、單例模式

單例模式(Singleton Pattern)是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某一個(gè)類(lèi)只有一個(gè)實(shí)例存在。當(dāng)你希望在整個(gè)系統(tǒng)中,某個(gè)類(lèi)只能出現(xiàn)一個(gè)實(shí)例時(shí),單例對(duì)象就能派上用場(chǎng)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-507385.html

class Single:
    #創(chuàng)建類(lèi)的隱藏屬性
    __instance = None   #父類(lèi)new方法的返回值, None的bool值為False

    def __new__(cls):
        #如果__instance的值為None, 就創(chuàng)建一個(gè)對(duì)象并賦值
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance


a = Single()
b = Single()
print(id(a), id(b)) # 地址一樣

a.name = '周周'
a.sex = '帥哥'
print(a.name, a.sex)
print(b.name, b.sex)

b.name = '提速狗'
b.sex = '美女'
print(a.name, a.sex)
print(b.name, b.sex)

到了這里,關(guān)于【Python爬蟲(chóng)與數(shù)據(jù)分析】面向?qū)ο笤O(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包