日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av网址观看 | 69影院少妇在线观看 | 亚洲男人的天堂网 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 在线免费观看麻豆 | 亚洲男女视频在线观看 | 日本h片在线观看 | 丝袜在线视频 | 人人爽视频 | 亚洲精品国产熟女久久久 | 国产精品永久在线观看 | 成人免费黄色 | 欧美群交射精内射颜射潮喷 | 日韩中文字幕国产 | 在线免费不卡视频 | 久久久久无码国产精品 | 精品国产999久久久免费 | 羞羞答答av| 美女被叉叉的影院 | 草莓视频在线观看18 | 国产免费一区二区三区最新6 | 毛片高清 | 欧美视频免费看欧美视频 | 美女扒开腿让男生桶 | 水果派解说av | 一级全黄裸体免费观看视频 | 人人人超碰 | 理论在线视频 | 成熟丰满熟妇高潮xxxxx视频 | 黄色片上床 | 激情五月婷婷小说 | 亚洲综合性 | 亚洲不卡网 | 最好看的日本字幕mv视频大全 | 亚洲伦理在线播放 | 亚洲狠狠婷婷综合久久久久图片 | 五月深爱网 | 久久99精品久久久久久园产越南 | 女生脱裤子让男生捅 | 高清一区二区三区四区五区 | 成人欧美一区 | 天天躁日日躁狠狠躁免费麻豆 | 激情伊人 | 少妇精品偷拍高潮白浆 | 免费观看在线高清 | 亚洲国产视频一区二区 | 爱射综合 | 国产欧美第一页 | 亚洲欧美综合另类 | av免费影院 | 少妇搡bbbb搡bbb搡小说 | 精品视频日韩 | 欧美18aaaⅹxx | 欧美日韩成人网 | 免费爱爱网站 | wwwxx在线观看| 久久涩涩 | 亚洲精品福利在线观看 | 国产毛片久久久久久久 | 国产精品久久久久久无人区 | 99在线免费观看 | 欧美黄色免费观看 | 超碰免费人人 | 黄色片免费的 | 日本一区二区不卡在线 | 波多野吉衣在线视频 | 在线免费一区二区 | 最新一区二区三区 | 神马影院一区二区 | 久草成人在线视频 | 激情综合网站 | 国产成人精品久久二区二区91 | 特大黑人巨人吊xxxx | 一区二区欧美精品 | 青娱网电信一区电信二区电信三区 | 日本不卡三区 | 懂色av中文一区二区三区天美 | 十八禁一区二区三区 | 久久夜色网 | 久久都是精品 | 少妇久久精品 | 在线看黄色的网站 | 狠狠躁18三区二区一区 | 欧美情侣性视频 | a在线观看视频 | 日本黄页网站免费大全 | 一区二区精品国产 | 91超碰免费 | 欧美人体一区二区三区 | 天堂在线中文8 | 国产人成在线观看 | 国产日产欧美一区二区三区 | 免费日韩一区 | 日韩欧美精品在线观看 | 九一精品视频 | 两性午夜视频 | 一本色道久久hezyo无码 | 爱情岛论坛成人 | 波多野结衣导航 |