前言
物件導向 : 採用基於物件(實體) 的概念建立模型,模擬客觀世界分析、設計、實現軟體的辦法。物件導向程式設計(Object-oriented Programming,簡稱OOP)是一種解決軟體重複使用的設計和程式設計方法,把軟體系統中相近相似的操作邏輯和操作應用資料、狀態,以類別的形式描述出來,以對象實例的形式在軟體系統中重複使用,提高軟體開發效率。
物件導向程式設計是Python中一個極為重要的概念。
一、物件導向與流程
1.兩類軟體開發設計方法
- 流程導向程式設計:依照業務邏輯從上往下,將需要用到的功能程式碼封裝到函數中,著重在開發的步驟和過程,典型程式碼為C語言(關注過程)
- 物件導向程式設計:將函數或所需的功能進行分類和封裝,專注專注於具體哪個類別和函數來實現功能,典型程式碼為Java、C 等語言(專注於結果)
#2.物件導向相關術語
- 類別(Class) :用來描述具有相同屬性和方法的物件的集合,它定義了該集合中每個物件所共有的屬性和方法,物件是類別的實例。
- 實例:也稱為物件。透過類別定義的初始化方法,賦予具體的值,成為一個」有血有肉的實體」。
- 類別變數:類別變數在整個實例化的物件中是公用的。類別變數定義在類別中且在函數體之外。類別變數通常不作為實例變數使用。
- 資料成員:類別變數或實例變數, 用於處理類別及其實例物件的相關的資料。
- 方法重寫:如果從父類別繼承的方法不能滿足子類別的需求,可以對其進行改寫,這個過程叫方法的覆寫(override),也稱為方法的重寫。
- 局部變數:定義在方法中的變量,只作用於目前實例的類別。
- 實例變數:在類別的宣告中,屬性是用變數來表示的。這種變數就稱為實例變量,是在類別聲明的內部但是在類別的其他成員方法之外聲明的。
- 方法:類別中定義的函數。
- 方法重寫:如果從父類別繼承的方法不能滿足子類別的需求,可以對其進行改寫,這個過程叫方法的覆寫(override),也稱為方法的重 寫。
- 靜態方法:不需要實例化就可以由類別執行的方法。
- 類別方法:類別方法是將類別本身作為物件進行操作的方法。
物件導向三大特性:
- 」封裝:將內部實作包裹起來,對外透明,提供api介面進行呼叫的機制。
- 繼承:即一個衍生類別(derived class)繼承父類別(base class)的變數和方法。
- 多態:根據物件類型的不同以不同的方式進行處理。
二、類別和物件
1.物件
物件是物件導向程式設計的核心,在使用物件過程中,為了將具有共同特徵和行為的一組物件抽象定義,形成類別
2.類別
1)概念
類別是一類事物,物件就是這一類事物的具體實現,類別具有相同的屬性和行為
2)類別(class)的組成
- 類別名稱:類別的名稱
- 屬性:事物的特徵
- 方法:具體做什麼
3)抽象
擁有相同或類似屬性和行為的物件都可以抽象化成一個類別
4)類的分類
建立類別使用class關鍵字,帶上類別名,再帶上括號,括號內為object,這樣的類別稱為:新式類別;也可以不帶括號和括號內的object,這樣的類別稱為:經典類別。
# 新式类 class Meeting2(object): pass # 经典类 class Meeting2: pass
5)建立物件
A = Meeting1() B
6)self
類別方法的第一個參數必須是self(按慣例是self,也可以是其他名稱),調用時不必傳入。 self代表類別的實例
三、取得或新增物件屬性
如下有個名為meeting的類,類別中初始化了name、age、sex、address、attack等屬性,定義了introduction和attacked兩個方法:
class Meeting(object): """meeting类的类描述""" def __init__(self, name, age, sex, address, attack): """构造函数""" 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}正在向您发起攻击,攻击力为{self.attack}!") def foreign_fun(): print("我是外部函数")
1.hasattr-檢查物件是否包含指定屬性或方法
用法:
hasattr(object,name)
作用:檢查物件中是否包含指定屬性或方法
傳回值:存在傳回true、不存在回傳false
# 实例化meeting类 Meeting = Meeting("张三", 20, "男", "南京", 108) # 获取Meeting对象中是否存在name属性 print(hasattr(Meeting, "name"))# True # 获取Meeting对象中是否存在mobile属性 print(hasattr(Meeting, "mobile"))# False # 获取Meeting对象中是否存在attacked方法 print(hasattr(Meeting, "attacked"))# True
2.getattr-取得物件中指定屬性的屬性值
用法:
getattr(object,name[,default])
作用:取得物件中指定屬性的屬性值
傳回值:若存在,則傳回該屬性的屬性值;若不存在,則傳回指定內容
# 实例化meeting类 Meeting = Meeting("张三", 20, "男", "南京", 108) # 获取Meeting对象中name属性的属性值 print(getattr(Meeting, "name"))# 张三 # 获取Meeting对象中kills属性或方法的值,若不存在则返回指定内容 print(getattr(Meeting, "kills", "未找到kills方法或属性"))# 未找到kills方法或属性 # 获取Meeting对象中attacked方法,返回值为函数地址 print(getattr(Meeting, "attacked")) # 使用getattr方法可以直接调用Meeting对象中的方法 f = getattr(Meeting, "attacked") f()
列印結果如下:
3.setattr-为object对象的name属性设置指定value
用法:
setattr(object,name,value)
作用:为object对象的指定属性设置指定value
返回值:
# 实例化meeting类 Meeting = Meeting("张三", 20, "男", "南京", 108) # 将对象中name属性的值改为“刘德华” setattr(Meeting, "name", "刘德华") # 获取对象中name的属性值 print(getattr(Meeting, "name"))# 刘德华 # 将对象外部的名为foreign_fun的方法引入对象内部,并重新命名为“new_foreign_fun” setattr(Meeting, "new_foreign_fun", foreign_fun) # 获取对象中是否存在foreign_fun的属性或方法,返回值为True或False print(hasattr(Meeting, "foreign_fun"))# False # 获取对象中是否存在new_foreign_fun的属性或方法,返回值为True或False print(hasattr(Meeting, "new_foreign_fun"))# True
打印结果如下:
四、魔法方法
1.__init__() 构造函数
__init__()方法是Python中一种特殊的方法,被称为构造函数或初始化方法,当创建这个类的实例时就会调用该方法。
class Meeting(object): """meeting类的类描述""" def __init__(self, name, age, sex, address, attack): """构造函数""" 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__() 析构函数
当删除对象时,Python解释器会默认调用一个方法__del__(),相当于unittest框架中的tearDown()函数
def __del__(self): """析构函数""" print("%s攻击结束" % (self.name))
每调用一次对象,都会执行一次__del__()方法
3.引用计数
D = Meeting("张三", 20, "男", "南京", 108) # 计算当前实例引用计数,D引用一次,sys.getrefcount(D)引用一次 print(sys.getrefcount(D))# 2
D对象的引用计数为2次,一次是D引用,一次是sys.getrefcount所引用的
4.__str()__字符串函数
__str__方法需要返回一个字符串,当做这个对象的描述信息,当使用print输出对象的时候,只要定义了__str__(self)方法,那么就会打印这个方法返回的数据
def __str__(self): """字符串函数""" return "我是Meeting类的字符串描述" # __str__():字符串函数,定义__str__()方法时,打印对象,打印的是__str__()方法的返回值,否则打印类的内存地址 print(D)# 我是Meeting类的字符串描述
- 未定义__str__()方法时,打印对象,打印的是Meeting类的内存地址:<__main__.meeting object at0x014a7748>
- 定义了__str__()方法后,打印对象,打印的是__str__()方法的返回值:我是Meeting类的字符串描述
五、Python的内置属性
1.__dict__:获取类的属性
获取类的属性,包含一个字典,由类的数据属性组成
# __dict__:获取类的属性,返回值为字典类型 print(D.__dict__) # {'name': '张三', 'age': 20, 'sex': '男', 'address': '南京', 'attack': 108}
2.__doc__:获取类的文档字符串
class Meeting(object): """meeting1类的类描述""" # __doc__:获取类的文档字符串 print(D.__doc__) # meeting1类的类描述
3.__name__:获取类名
# __name__:获取类名 print(Meeting.__name__) # Meeting
4.__module__:类定义所在的模块
类的全名是'__main__.clssName',如果类位于一个导入模块mymod中,那么className.__module__等于mymod
from common.http_requests import HttpRequests # __module__:类定义所在的模块 print(Meeting.__module__)# __main__ print(HttpRequests.__module__)# common.http_requests
Meeting类的路径为__main__,而从common文件的http_requests文件中导入了HttpRequests类,打印其路径,则为common.http_requests
5.__bases__:获取类的所有父类构成元素
获取类的所有父类构成元素(包含了一个由所有父类元素组成的元组)。例如下面有一个Song类,其继承了父类Music,则获取到的Song类的所有父类构成元素为:(
class Music(object): pass class Song(Music): pass print(Song.__bases__)# (<class '__main__.Music'>,)
小结
本篇文章我们介绍了面向对象的相关概念,下面来简单总结一下:
面向对象相关概念:
- 类和对象:类是一类事物,对象即是这一类事物的具体实现,类具有相同的属性和行为;
- 类的组成:类名、属性、方法
- 带object的为新式类,不带object的为经典类
获取或添加对象属性:
- hasattr:检查对象是否包含指定属性或方法
- getattr:获取对象中指定属性的属性值
- setattr:为object对象的name属性设置指定value
魔法方法:
- __init__() 构造函数:又叫初始化方法,用来初始化一些成员变量
- __del__() 析构函数:每调用一次对象,都会执行一次__del__()方法,相当于Unittest框架中的tearDown
- __str()__字符串函数:返回一个字符串,当做这个对象的描述信息
Python内置属性:
- __dict__:获取类的属性,返回值为字典类型
- __doc__:获取类的文档字符串
- __name__:获取类名
- __module__:类定义所在的模块
- __bases__:获取类的所有父类构成元素,返回类型为元组
以上是Python物件導向程式設計-初級篇的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

數組的同質性對性能的影響是雙重的:1)同質性允許編譯器優化內存訪問,提高性能;2)但限制了類型多樣性,可能導致效率低下。總之,選擇合適的數據結構至關重要。

到CraftCraftExecutablePythcripts,lollow TheSebestPractices:1)Addashebangline(#!/usr/usr/bin/envpython3)tomakethescriptexecutable.2)setpermissionswithchmodwithchmod xyour_script.3)

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能