日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python编程高手教程_写给编程高手的Python教程(11) 深入类和对象

發(fā)布時間:2025/5/22 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python编程高手教程_写给编程高手的Python教程(11) 深入类和对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)使我快樂

鴨子類型和多態(tài)

當(dāng)看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。

例如下面三個類(Cat、Dog、Duck)的定義中都定義了say方法

class Cat:

def say(self):

print("I am a cat!")

class Dog:

def say(self):

print("I am a dog! ")

class Duck:

def say(self):

print("I am a duck! ")

我們就可以如下面的方法,使用這三個類的定義。

animals = [Cat, Dog, Duck]

for Animal in animals:

Animal().say();

復(fù)制代碼

要在Java、C++那些靜態(tài)語言中,要實現(xiàn)上述效果,通常要使用如下的多態(tài)機制。

class Animal:

def say(self):

print("I am a animal!")

class Cat(Animal):

def say(self):

print("I am a cat!")

a_animal = Cat()

a_animal.say() # 多態(tài)

擴展:列表的extend方法傳遞可迭代的對象即可,它會調(diào)用getitem方法

抽象基類 (abc模塊)

首先看看如下定義:

class Company:

def init(self, employee_list):

self.employee = employee_list

def len(self):

return len(self.employee)

com = Company(["bobby1", "bobby2"])

抽象基類通常有以下幾個優(yōu)點:

判斷類型

我們要判定某個類型是否是“某個鴨子”,通常有如下兩種方法。

print(hasattr(com, "len"))

print(isinstance(com, Company)) # 這種方式更好

擴展:abc模塊collections.abc,和全局abc

強制某個子類必須實現(xiàn)某些方法

例如要實現(xiàn)了一個web框架, 集成Cache(redis、cache、、),需要設(shè)計一個抽象基類, 指定子類必須實現(xiàn)某些方法

from abc import abstractmethod

class Cache:

@abstractmethod

def get(self, key):

pass

@abstractmethod

def set(self, key, value):

pass

class RedisCache(Cache):

def get(self, key):

pass

def set(self, key, value):

pass

redis = RedisCache()

redis.set("key", "value")

擴展:isinstance和type的區(qū)別 首先看看如下定義:

class A:

pass

class B(A): #A、B可以看成是模板對象,全局只有一個

pass

b = B()

print(isinstance(b, A)) #True

python中的is是判斷兩個對象的地址是否一樣,==是判斷兩個對象的內(nèi)容是否一樣。

print(type(b) is B) #判斷地址是否相同 True

print(type(b) == B) #判斷值是否相同 True

print(type(b) is A) #False

類變量和實例變量

class A:

aa = 1

def init(self, x, y):

self.x = x

self.y = y

a = A(2, 3)

A.aa = 11

a.aa = 100 # 添加新的屬性到a對象上

print(a.x, a.y, a.aa) # 100

print(A.aa) # 11

print(A.x) #拋異常

b = A(4, 6)

print(b.aa)

類和實例屬性的查找順序—mro查找

多繼承子類屬性的查找問題,如下所述,采用廣度和深度搜索都是有問題的。 父類 子類 D---->B---->A E---->C---->A

DFS: A->B->D->C->E BFS: A->B->C->D->E, 如果D和C有重名方法,C會覆蓋D

菱形繼承 D---->B---->A D---->C---->A

DFS: A->B->D->C, C的方法無法覆蓋D的方法 BFS: A-->B->C->D

python采用一種C3的算法查找屬性和函數(shù)。

class D:

pass

class C(D):

pass

class B(D):

pass

class A(B, C):

pass

print(A.mro) # 獲取查詢順序

類方法、靜態(tài)方法和實例方法

class Date:

#構(gòu)造函數(shù)

def init(self, year, month, day):

self.year = year

self.month = month

self.day = day

def tomorrow(self): #實例方法

self.day += 1

@staticmethod # 不需要cls類型的信息

def vaild_str(date_str):

year, month, day = tuple(date_str.split("-"))

if int(year) > 0 and int(month) > 0 and int(month) <= 12 and int(day) > 0 and int(day) <= 31:

return True

else:

return False

@staticmethod

def parse_from_string(date_str): #靜態(tài)方法

year, month, day = tuple(date_str.split("-"))

return Date(year, month, day)

@classmethod

def parse_from(cls, date_str): #類方法

year, month, day = tuple(date_str.split("-"))

return cls(year, month, day) #cls不用硬編碼了

def __str__(self):

return "{year}/{month}/{day}".format(year=self.year, month=self.month, day=self.day)

擴展:元組是可以拆包的

date_str = "2018-12-31"

year, month, day = tuple(date_str.split("-"))

數(shù)據(jù)封裝和私有屬性

class User: def init(self, birthday): self.__birthday = birthday

def age(self):

return 2020 - self.__birthday.year

user = User(Date(1990, 2, 1))

print(user.__birthday) #報錯,到達私有目的, 子類也沒辦法獲取

print(user._User__birthday) #變形規(guī)則 print(user.age())

class Student(User): def init(self, birthday): self.__birthday = birthday

stu = Student(Date(1995, 4, 1))

print(stu._Student__birthday)

python對象的自省機制

自省是通過一定的機制查詢到對象的內(nèi)部結(jié)構(gòu)

class Person: """ 人 """ name = "person"

class Student(Person): def init(self, school): self.school = school

stu = Student("慕課網(wǎng)") print(stu.dict) print(stu.name) # name屬于Person類 print(Person.dict)

stu.dict["addr"] = "北京市" print(stu.addr) print(dir(stu)) # 列出對象所有屬性

4-10 super真的是調(diào)用父類嗎?

class A: def init(self): print("A")

class B(A): def init(self): print("B") super().init()

class C(A): def init(self): print("C") super().init()

class D(B, C): def init(self): print("D") super().init() b = B() print("-------------------") d = D() #按MRO算法 super調(diào)用順序 from threading import Thread

class MyThread(Thread): def init(self, name, user): self.user = user super().init(name=name) # MRO算法

mixin繼承案例

python中的with語句

try except finally

try: print("code started") raise KeyError # raise IndexError except KeyError as e: print("key error") else: print("other error") finally: print("finally...")

上下文管理器(協(xié)議)

class Sample: def enter(self): print("enter") return self

def exit(self, exc_type, exc_val, exc_tb):

print("exit")

def do_something(self):

print("doing something.....")

with Sample() as sample: sample.do_something()

from contextlib import contextmanager

@contextmanager def openFile(file): print("file open....") yield {} print("file close....")

print("-------------") with openFile("hao.txt"): print("file processing...")

總結(jié)

以上是生活随笔為你收集整理的python编程高手教程_写给编程高手的Python教程(11) 深入类和对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91麻豆视频在线观看 | 白浆av| 91精品人妻一区二区 | 久久精品视频无码 | 男女性网站 | 视频一区二区三区在线 | 中文在线不卡视频 | 日本黄色一级视频 | 91av免费观看 | 伊人资源网 | 国产麻豆电影在线观看 | 精品人妻伦一二三区久 | 人人操在线播放 | 精品久久一区二区 | 三级黄色在线 | 三级黄色在线播放 | 呦呦网| 日韩高清精品免费观看 | 波多野结衣免费看 | 天天干干天天 | 久久四虎 | 免费在线亚洲 | 韩国毛片基地 | av在线亚洲天堂 | 美国黄色一级大片 | 国产四区视频 | 一级α片免费看刺激高潮视频 | 欧美视频一区二区三区四区 | 亚洲天堂免费视频 | jizz成熟丰满日本少妇 | 原来神马电影免费高清完整版动漫 | 亚洲激情av | 国产一级久久 | 91污在线观看 | www.97视频 | 秘密爱大尺度做爰呻吟 | 亚洲黄色激情视频 | 你懂的视频在线播放 | 久久免费视频99 | 青娱乐精品视频 | 蜜芽在线视频 | 啪啪免费网址 | av观看免费| 午夜一区在线观看 | 黄色一级视频网站 | 亚洲性生活大片 | 欧美日韩高清一区二区 国产亚洲免费看 | 日本三级中文 | 中文字幕欧美一区 | 日韩天堂av | 日本a级无毛 | 视频一区二区在线播放 | 亚洲精品免费播放 | 成人动漫中文字幕 | 一级黄在线观看 | 日韩色图视频 | 久久都是精品 | 国产精选一区二区三区 | 91精品国产高清91久久久久久 | 成年人在线播放视频 | 办公室摸腿吻胸激情视频 | 亚洲视频一区二区在线观看 | 久久人人爽人人爽人人片 | 免费观看日批视频 | 超碰人人99 | 性生交大片免费看女人按摩 | 日本视频色 | 爽妇网国产精品 | 亚洲精品国产a | 黄页免费视频 | 美女啪啪免费视频 | 欧美日韩免费在线观看 | 看个毛片 | 粉嫩视频在线观看 | 欧美动态视频 | 黄色小视频在线观看 | 中文字幕第十一页 | 精品国产乱码久久久久久蜜柚 | 日韩在线激情视频 | 在线免费观看视频网站 | v99av| 国产aⅴ爽av久久久久成人 | 波多野结衣一区二区三区高清av | 黄色日韩| 91精品免费观看 | 悠悠色综合 | 蜜桃精品久久久久久久免费影院 | 亚洲精品中文字幕乱码三区91 | 亚洲一区二区激情 | 欧美视频在线播放 | 亚洲影院在线观看 | 手机av在线播放 | 探花国产 | 国产a v一区二区三区 | 久久久免费观看视频 | 亚洲激情图片区 | 亚洲在线影院 | 国产喷水视频 | 国产区高清 |