成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python面向?qū)ο缶幊?初級(jí)篇

開(kāi)發(fā) 前端
對(duì)象是面向?qū)ο缶幊痰暮诵模谑褂脤?duì)象過(guò)程中,為了將具有共同特征和行為的一組對(duì)象抽象定義,形成類(lèi)。

前言

面向?qū)ο?: 采用基于對(duì)象(實(shí)體) 的概念建立模型,模擬客觀世界分析、設(shè)計(jì)、實(shí)現(xiàn)軟件的辦法。面向?qū)ο缶幊蹋∣bject-oriented Programming,簡(jiǎn)稱(chēng) OOP)是一種解決軟件復(fù)用的設(shè)計(jì)和編程方法,把軟件系統(tǒng)中相近相似的操作邏輯和操作應(yīng)用數(shù)據(jù)、狀態(tài),以類(lèi)的形式描述出來(lái),以對(duì)象實(shí)例的形式在軟件系統(tǒng)中復(fù)用,提高軟件開(kāi)發(fā)效率。

面向?qū)ο缶幊淌荘ython中一個(gè)極為重要的概念。

一、面向?qū)ο蠛兔嫦蜻^(guò)程

1.兩類(lèi)軟件開(kāi)發(fā)設(shè)計(jì)方法

  1. 面向過(guò)程編程:根據(jù)業(yè)務(wù)邏輯從上往下,將需要用到的功能代碼封裝到函數(shù)中,著重關(guān)注開(kāi)發(fā)的步驟和過(guò)程,典型代碼為C語(yǔ)言(關(guān)注過(guò)程)
  2. 面向?qū)ο缶幊蹋簩⒑瘮?shù)或所需要的功能進(jìn)行分類(lèi)和封裝,著重關(guān)注具體哪個(gè)類(lèi)和函數(shù)來(lái)實(shí)現(xiàn)功能,典型代碼為Java、C++等語(yǔ)言(關(guān)注結(jié)果)

2.面向?qū)ο笙嚓P(guān)術(shù)語(yǔ)

  • 類(lèi)(Class):用來(lái)描述具有相同屬性和方法的對(duì)象的集合,它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法,對(duì)象是類(lèi)的實(shí)例。
  • 實(shí)例:也稱(chēng)對(duì)象。通過(guò)類(lèi)定義的初始化方法,賦予具體的值,成為一個(gè)”有血有肉的實(shí)體”。
  • 類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中且在函數(shù)體之外。類(lèi)變量通常不作為實(shí)例變量使用。
  • 數(shù)據(jù)成員:類(lèi)變量或者實(shí)例變量, 用于處理類(lèi)及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)。
  • 方法重寫(xiě):如果從父類(lèi)繼承的方法不能滿(mǎn)足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱(chēng)為方法的重寫(xiě)。
  • 局部變量:定義在方法中的變量,只作用于當(dāng)前實(shí)例的類(lèi)。
  • 實(shí)例變量:在類(lèi)的聲明中,屬性是用變量來(lái)表示的。這種變量就稱(chēng)為實(shí)例變量,是在類(lèi)聲明的內(nèi)部但是在類(lèi)的其他成員方法之外聲明的。
  • 方法:類(lèi)中定義的函數(shù)。
  • 方法重寫(xiě):如果從父類(lèi)繼承的方法不能滿(mǎn)足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱(chēng)為方法的重 寫(xiě)。
  • 靜態(tài)方法:不需要實(shí)例化就可以由類(lèi)執(zhí)行的方法。
  • 類(lèi)方法:類(lèi)方法是將類(lèi)本身作為對(duì)象進(jìn)行操作的方法。

面向?qū)ο笕筇匦裕?/strong>

  • 封裝:將內(nèi)部實(shí)現(xiàn)包裹起來(lái),對(duì)外透明,提供api接口進(jìn)行調(diào)用的機(jī)制。
  • 繼承:即一個(gè)派生類(lèi)(derived class)繼承父類(lèi)(base class)的變量和方法。
  • 多態(tài):根據(jù)對(duì)象類(lèi)型的不同以不同的方式進(jìn)行處理。

二、類(lèi)和對(duì)象

1.對(duì)象

對(duì)象是面向?qū)ο缶幊痰暮诵?,在使用?duì)象過(guò)程中,為了將具有共同特征和行為的一組對(duì)象抽象定義,形成類(lèi)

2.類(lèi)

1)概念

類(lèi)是一類(lèi)事物,對(duì)象即是這一類(lèi)事物的具體實(shí)現(xiàn),類(lèi)具有相同的屬性和行為

2)類(lèi)(class)的組成

  • 類(lèi)名:類(lèi)的名稱(chēng)
  • 屬性:事物的特征
  • 方法:具體做什么

3)抽象

擁有相同或類(lèi)似屬性和行為的對(duì)象都可以抽象成一個(gè)類(lèi)

4)類(lèi)的分類(lèi)

創(chuàng)建類(lèi)使用class關(guān)鍵字,帶上類(lèi)名,再帶上括號(hào),括號(hào)內(nèi)為object,這樣的類(lèi)稱(chēng)為:新式類(lèi);也可以不帶括號(hào)和括號(hào)內(nèi)的object,這樣的類(lèi)稱(chēng)為:經(jīng)典類(lèi)。

# 新式類(lèi) 
class Meeting2(object):
pass
# 經(jīng)典類(lèi)
class Meeting2:
pass

5)創(chuàng)建對(duì)象

A = Meeting1() 
B

6)self

類(lèi)方法的第一個(gè)參數(shù)必須是self(按慣例是self,也可以是其他名稱(chēng)),調(diào)用時(shí)不必傳入。self代表類(lèi)的實(shí)例

三、獲取或添加對(duì)象屬性

如下有個(gè)名為meeting的類(lèi),類(lèi)中初始化了name、age、sex、address、attack等屬性,定義了introduction和attacked兩個(gè)方法:

class Meeting(object):
"""meeting類(lèi)的類(lèi)描述"""

def __init__(self, name, age, sex, address, attack):
"""構(gòu)造函數(shù)"""
self.name = name
self.age = int(age)
self.sex = sex
self.address = address
self.attack = int(attack)

def introduction(self):
print("姓名:{}".format(self.name))
print("年齡:{}".format(self.age))
print("性別:{}".format(self.sex))
print("地址:{}".format(self.address))

def attacked(self):
print(f"{self.name}正在向您發(fā)起攻擊,攻擊力為{self.attack}!")

def foreign_fun():
print("我是外部函數(shù)")

1.hasattr-檢查對(duì)象是否包含指定屬性或方法

用法:

hasattr(object,name)

作用:檢查對(duì)象中是否包含指定屬性或方法

返回值:存在返回true、不存在返回false

# 實(shí)例化meeting類(lèi)
Meeting = Meeting("張三", 20, "男", "南京", 108)

# 獲取Meeting對(duì)象中是否存在name屬性
print(hasattr(Meeting, "name")) # True
# 獲取Meeting對(duì)象中是否存在mobile屬性
print(hasattr(Meeting, "mobile")) # False
# 獲取Meeting對(duì)象中是否存在attacked方法
print(hasattr(Meeting, "attacked")) # True

2.getattr-獲取對(duì)象中指定屬性的屬性值

用法:

getattr(object,name[,default])

作用:獲取對(duì)象中指定屬性的屬性值

返回值:若存在,則返回該屬性的屬性值;若不存在,則返回指定內(nèi)容

# 實(shí)例化meeting類(lèi)
Meeting = Meeting("張三", 20, "男", "南京", 108)

# 獲取Meeting對(duì)象中name屬性的屬性值
print(getattr(Meeting, "name")) # 張三
# 獲取Meeting對(duì)象中kills屬性或方法的值,若不存在則返回指定內(nèi)容
print(getattr(Meeting, "kills", "未找到kills方法或?qū)傩?)) # 未找到kills方法或?qū)傩?br># 獲取Meeting對(duì)象中attacked方法,返回值為函數(shù)地址
print(getattr(Meeting, "attacked"))
# 使用getattr方法可以直接調(diào)用Meeting對(duì)象中的方法
f = getattr(Meeting, "attacked")
f()

打印結(jié)果如下:

3.setattr-為object對(duì)象的name屬性設(shè)置指定value

用法:

setattr(object,name,value)

作用:為object對(duì)象的指定屬性設(shè)置指定value

返回值:

# 實(shí)例化meeting類(lèi)
Meeting = Meeting("張三", 20, "男", "南京", 108)

# 將對(duì)象中name屬性的值改為“劉德華”
setattr(Meeting, "name", "劉德華")
# 獲取對(duì)象中name的屬性值
print(getattr(Meeting, "name")) # 劉德華
# 將對(duì)象外部的名為foreign_fun的方法引入對(duì)象內(nèi)部,并重新命名為“new_foreign_fun”
setattr(Meeting, "new_foreign_fun", foreign_fun)
# 獲取對(duì)象中是否存在foreign_fun的屬性或方法,返回值為T(mén)rue或False
print(hasattr(Meeting, "foreign_fun")) # False
# 獲取對(duì)象中是否存在new_foreign_fun的屬性或方法,返回值為T(mén)rue或False
print(hasattr(Meeting, "new_foreign_fun")) # True

打印結(jié)果如下:

四、魔法方法

1.__init__() 構(gòu)造函數(shù)

__init__()方法是Python中一種特殊的方法,被稱(chēng)為構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建這個(gè)類(lèi)的實(shí)例時(shí)就會(huì)調(diào)用該方法。

class Meeting(object):
"""meeting類(lèi)的類(lèi)描述"""

def __init__(self, name, age, sex, address, attack):
"""構(gòu)造函數(shù)"""
self.name = name
self.age = int(age)
self.sex = sex
self.address = address
self.attack = int(attack)

C = Meeting("張三", 20, "男", "南京", 108)
print(C.name) # 張三
print(C.address) # 南京

2.__del__() 析構(gòu)函數(shù)

當(dāng)刪除對(duì)象時(shí),Python解釋器會(huì)默認(rèn)調(diào)用一個(gè)方法__del__(),相當(dāng)于unittest框架中的tearDown()函數(shù)

def __del__(self): 
"""析構(gòu)函數(shù)"""
print("%s攻擊結(jié)束" % (self.name))

每調(diào)用一次對(duì)象,都會(huì)執(zhí)行一次__del__()方法

3.引用計(jì)數(shù)

D = Meeting("張三", 20, "男", "南京", 108)
# 計(jì)算當(dāng)前實(shí)例引用計(jì)數(shù),D引用一次,sys.getrefcount(D)引用一次
print(sys.getrefcount(D)) # 2

D對(duì)象的引用計(jì)數(shù)為2次,一次是D引用,一次是sys.getrefcount所引用的

4.__str()__字符串函數(shù)

__str__方法需要返回一個(gè)字符串,當(dāng)做這個(gè)對(duì)象的描述信息,當(dāng)使用print輸出對(duì)象的時(shí)候,只要定義了__str__(self)方法,那么就會(huì)打印這個(gè)方法返回的數(shù)據(jù)

def __str__(self):
"""字符串函數(shù)"""
return "我是Meeting類(lèi)的字符串描述"
# __str__():字符串函數(shù),定義__str__()方法時(shí),打印對(duì)象,打印的是__str__()方法的返回值,否則打印類(lèi)的內(nèi)存地址
print(D) # 我是Meeting類(lèi)的字符串描述
  • 未定義__str__()方法時(shí),打印對(duì)象,打印的是Meeting類(lèi)的內(nèi)存地址:<__main__.Meeting object at0x014A7748>
  • 定義了__str__()方法后,打印對(duì)象,打印的是__str__()方法的返回值:我是Meeting類(lèi)的字符串描述

五、Python的內(nèi)置屬性

1.__dict__:獲取類(lèi)的屬性

獲取類(lèi)的屬性,包含一個(gè)字典,由類(lèi)的數(shù)據(jù)屬性組成

# __dict__:獲取類(lèi)的屬性,返回值為字典類(lèi)型 
print(D.__dict__)
# {'name': '張三', 'age': 20, 'sex': '男', 'address': '南京', 'attack': 108}

2.__doc__:獲取類(lèi)的文檔字符串

class Meeting(object): 
"""meeting1類(lèi)的類(lèi)描述"""

# __doc__:獲取類(lèi)的文檔字符串
print(D.__doc__) # meeting1類(lèi)的類(lèi)描述

3.__name__:獲取類(lèi)名

# __name__:獲取類(lèi)名 
print(Meeting.__name__) # Meeting

4.__module__:類(lèi)定義所在的模塊

類(lèi)的全名是'__main__.clssName',如果類(lèi)位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__等于mymod

from common.http_requests import HttpRequests
# __module__:類(lèi)定義所在的模塊
print(Meeting.__module__) # __main__
print(HttpRequests.__module__) # common.http_requests

Meeting類(lèi)的路徑為_(kāi)_main__,而從common文件的http_requests文件中導(dǎo)入了HttpRequests類(lèi),打印其路徑,則為common.http_requests

5.__bases__:獲取類(lèi)的所有父類(lèi)構(gòu)成元素

獲取類(lèi)的所有父類(lèi)構(gòu)成元素(包含了一個(gè)由所有父類(lèi)元素組成的元組)。例如下面有一個(gè)Song類(lèi),其繼承了父類(lèi)Music,則獲取到的Song類(lèi)的所有父類(lèi)構(gòu)成元素為:(<class '__main__.Music'>,)

class Music(object):
pass

class Song(Music):
pass

print(Song.__bases__) # (<class '__main__.Music'>,)

小結(jié)

本篇文章我們介紹了面向?qū)ο蟮南嚓P(guān)概念,下面來(lái)簡(jiǎn)單總結(jié)一下:

面向?qū)ο笙嚓P(guān)概念:

  • 類(lèi)和對(duì)象:類(lèi)是一類(lèi)事物,對(duì)象即是這一類(lèi)事物的具體實(shí)現(xiàn),類(lèi)具有相同的屬性和行為;
  • 類(lèi)的組成:類(lèi)名、屬性、方法
  • 帶object的為新式類(lèi),不帶object的為經(jīng)典類(lèi)

獲取或添加對(duì)象屬性:

  • hasattr:檢查對(duì)象是否包含指定屬性或方法
  • getattr:獲取對(duì)象中指定屬性的屬性值
  • setattr:為object對(duì)象的name屬性設(shè)置指定value

魔法方法:

  • __init__() 構(gòu)造函數(shù):又叫初始化方法,用來(lái)初始化一些成員變量
  • __del__() 析構(gòu)函數(shù):每調(diào)用一次對(duì)象,都會(huì)執(zhí)行一次__del__()方法,相當(dāng)于Unittest框架中的tearDown
  • __str()__字符串函數(shù):返回一個(gè)字符串,當(dāng)做這個(gè)對(duì)象的描述信息

Python內(nèi)置屬性:

  • __dict__:獲取類(lèi)的屬性,返回值為字典類(lèi)型
  • __doc__:獲取類(lèi)的文檔字符串
  • __name__:獲取類(lèi)名
  • __module__:類(lèi)定義所在的模塊
  • __bases__:獲取類(lèi)的所有父類(lèi)構(gòu)成元素,返回類(lèi)型為元組
責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-03-26 10:50:22

Python面向?qū)ο?/a>編程語(yǔ)言

2023-12-11 15:32:30

面向?qū)ο缶幊?/a>OOPpython

2010-03-10 13:25:07

Python面向?qū)ο?/a>

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對(duì)象編程

2023-04-26 00:15:32

python面向?qū)ο?/a>java

2010-11-17 11:31:22

Scala基礎(chǔ)面向?qū)ο?/a>Scala

2023-09-27 23:28:28

Python編程

2022-07-30 23:41:53

面向過(guò)程面向?qū)ο?/a>面向協(xié)議編程

2012-12-13 11:01:42

IBMdW

2012-02-27 09:30:22

JavaScript

2010-02-26 14:40:15

Python應(yīng)用程序

2010-07-16 17:23:57

Perl面向?qū)ο缶幊?/a>

2011-05-25 10:21:44

Javascript

2011-06-28 11:06:16

Scala

2012-12-18 09:24:47

2010-07-13 17:18:29

Perl面向?qū)ο缶幊?/a>

2011-05-25 10:59:26

Javascript繼承

2010-07-13 13:06:41

Perl面向?qū)ο?/a>

2013-06-07 10:55:10

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品99久久久久久www | 成人免费网站视频 | 国产精品国产三级国产aⅴ无密码 | 日韩欧美二区 | 国产精品成人国产乱一区 | 亚洲二区在线 | 久久精品一区二区 | 盗摄精品av一区二区三区 | 久久专区| 超碰伊人久久 | 欧美一区二区 | 一区二区三区中文字幕 | 国产在线精品一区二区三区 | 91国在线观看 | 久久精品男人的天堂 | 在线播放亚洲 | 韩日在线观看视频 | 日韩中文字幕免费在线 | 成人妇女免费播放久久久 | 国产精品毛片一区二区在线看 | 日韩精品一区二区三区在线观看 | 日韩欧美在线观看视频 | 国产精品1区 | 国产一区二区在线视频 | 国产精品99久久久久久久久 | 欧美精品一区在线 | 亚洲成人精品一区 | 久久久99精品免费观看 | 国产一区久久久 | www.亚洲精品 | 久草在线影 | 丝袜 亚洲 另类 欧美 综合 | 四虎永久在线精品免费一区二 | 黄色网址在线播放 | 亚洲欧美一区在线 | 在线不卡av | 欧美日韩在线成人 | 一区二区三区av | 日本久久精品视频 | 日韩第一区| 欧美激情久久久 |