Python3 面向對象程序設計

類的定義

Python使用class關鍵字來定義類

class Car:def infor(self):print("This is a car")
car = Car()
car.infor()

內置方法isinstance()來測試一個對象是否為某個類的實例

self參數

  • 類的 所有實例方法都有一個默認的self參數,并且必須是方法的第一個形參。但是不一定命名為self
  • self參數代表將來要創建的對象(實例)本身
  • 在內部,訪問實例屬性需要以self為前綴
  • 在外部,通過對象名調用對象方法時并不需要傳遞這個參數,如果在外部通過類名調用對象方法則需要顯示為self傳遞參數

類的成員和實例成員

  • 類的成員:在類中所有方法定義之外定義的,通過類名或者對象名來訪問
  • 實例成員:一般是指在構造函數__init__()中定義的(在其他函數中也可以,在外部定義也可以),在類內部定義和使用時必須以self作為前綴,在類的外部必須通過對象名訪問。我們可以同時擁有相同名字的類成員和實例成員。當名字相同時根據訪問方式的不同進行區分
  • 類成員是各個實例共享的,而實例成員不會共享
  • 混入(mixin)機制:可以動態地為類和對象增加成員,是Python動態類型特點的重要體現
    在這里插入圖片描述- 混入機制在大型項目開發中非常方便和實用
    在這里插入圖片描述在這里插入圖片描述

在這里插入圖片描述

私有成員和公有成員

  • 私有成員:以兩個下劃線__開頭
    • 在類的外部不能直接訪問,需要通過對象的公有成員方法來訪問
    • 可以通過Python支持的特殊方式來訪問
  • 公有成員:既可以在類的內部訪問,也可以在外部程序中使用

在這里插入圖片描述用下劃線作為變量名和方法名前綴和后綴表示類的特殊成員:

  • _XXX受保護成員,不能用from module import *導入
  • __XXX__系統定義的特殊成員
  • __XXX私有成員,只有類對象自己能訪問,在對象外部可以使用對象名._類名_XXX這樣特殊的方式進行訪問

IDLE環境中,在對象或者類名后面加上一個圓點.稍等一秒鐘會自動列出其所有公開成員,模塊也具有同樣的用法
在圓點.后面再加一個下劃線則會列出該對象、類或者模塊的所有成員,包括私有成員

成員方法

  • 公有方法、私有方法都屬于對象,私有方法的名字以兩個下劃線開始,每個對象都有自己的公有方法和私有方法,在這兩類方法中可以訪問屬于類和成員的對象
  • 公有方法通過對象名直接調用,私有方法不能直接調用,只能再屬于對象的方法中使用self調用或者使用特殊的方式
  • 如果通過類名來調用屬于對象的公有方法,則需要顯式為該方法傳遞self參數,用來指明訪問哪個對象的數據成員
  • 靜態方法和類方法都可以用過類名和對象名調用,但不能直接訪問屬于對象的實例成員,只能訪問屬于類的成員
  • 一般將cls作為類方法的第一個參數名稱,但也可以用其他名字作為參數,并且在調用類方法時不需要為該參數傳遞值
  • 從類?法和實例?法以及靜態?法的定義形式就可以看出來,類?法的第? 個參數是類對象cls,那么通過cls引?的必定是類對象的屬性和?法;?實例 ?法的第?個參數是實例對象self,那么通過self引?的可能是類屬性、也有 可能是實例屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實 例屬性的情況下,實例屬性優先級更?。靜態?法中不需要額外定義參數, 因此在靜態?法中引?類屬性的話,必須通過類對象來引?
    在這里插入圖片描述在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383694.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡【二】物理層基礎知識

計算機網絡的性能 速率:連接在計算機網絡上的主機在數字信道上傳送數據位數的速率,也成為data rate 或bit rate,單位是b/s,kb/s,Mb/s,Gb/s。 我們平時所講的寬帶的速度是以字為單位的,但是實際中應用一般顯示的是字節 &#xff0…

Linux網絡編程——tcp并發服務器(多進程)

https://blog.csdn.net/lianghe_work/article/details/46503895一、tcp并發服務器概述一個好的服務器,一般都是并發服務器(同一時刻可以響應多個客戶端的請求)。并發服務器設計技術一般有:多進程服務器、多線程服務器、I/O復用服務器等。二、…

求序列第K大算法總結

參考博客:傳送門 在上面的博客中介紹了求序列第K大的幾種算法,感覺收益良多,其中最精巧的還是利用快速排序的思想O(n)查詢的算法。仔細學習以后我將其中的幾個實現了一下。 解法 1: 將亂序數組從大到小進行排序然后取出前K大&a…

Linux網絡編程——tcp并發服務器(多線程)

https://blog.csdn.net/lianghe_work/article/details/46504243tcp多線程并發服務器多線程服務器是對多進程服務器的改進,由于多進程服務器在創建進程時要消耗較大的系統資源,所以用線程來取代進程,這樣服務處理程序可以較快的創建。據統計&a…

計算機網絡【三】物理層數據通信

物理層傳輸媒介 導向傳輸媒體,比如光纖和銅線 雙絞線(屏蔽雙絞線STP 五屏蔽雙絞線UTP)電線扭曲在一起可以降低互相之間的電磁干擾 同軸電纜 (50歐姆的基帶同軸電纜,75歐姆的寬帶同軸電纜) 10M和100M網絡只使用了四根線&#xf…

02_算法分析

02_算法分析 0.1 算法的時間復雜度分析0.1.1 函數漸近增長概念:輸入規模n>2時,算法A1的漸近增長小于算法B1 的漸近增長隨著輸入規模的增大,算法的常數操作可以忽略不計測試二:隨著輸入規模的增大,與最高次項相乘的常…

Linux網絡編程——I/O復用之select詳解

https://blog.csdn.net/lianghe_work/article/details/46506143一、I/O復用概述I/O復用概念:解決進程或線程阻塞到某個 I/O 系統調用而出現的技術,使進程不阻塞于某個特定的 I/O 系統調I/O復用使用的場合:1.當客戶處理多個描述符(…

Linux多進程拷貝文件

學習了mmap以后&#xff0c;實現一個簡單的小程序&#xff0c;進行多個進程對一個文件進行拷貝。 Linux mmap共享內存學習可以參考我的另一篇博客&#xff1a;傳送門 實現思想 我們可以將原來的文件利用mmap分成多個段分別進行傳輸。 實現代碼 #include<stdio.h> #…

斐波那契查找(Fibonacci Search)和折半查找

兩個查找算法都是針對有序數組進行查找&#xff0c;不同點在于分界點的取值不同。 算法介紹 折半查找很簡單&#xff0c;每次與當前區間的中點進行比較&#xff0c;然后決定查找前一部分還是后一部分。 Fibonacci查找利用了Fibonacci序列每一項等于前兩項和的特點進行劃分&a…

Linux網絡編程——tcp并發服務器(I/O復用之select)

https://blog.csdn.net/lianghe_work/article/details/46519633與多線程、多進程相比&#xff0c;I/O復用最大的優勢是系統開銷小&#xff0c;系統不需要建立新的進程或者線程&#xff0c;也不必維護這些線程和進程。代碼示例&#xff1a;#include <stdio.h> #include &l…

操作系統【二】死鎖問題以及處理方法

死鎖的概念 死鎖&#xff1a;在并發環境下&#xff0c;個進程因為競爭資源而造成的一種互相等待對方手里的資源&#xff0c;導致各進程都阻塞&#xff0c;無法向前推進的現象。 區別&#xff1a; 饑餓&#xff1a;由于長期得不到想要的資源進程無法向前推進的現象。死循環&a…

Linux網絡編程——I/O復用之poll函數

https://blog.csdn.net/lianghe_work/article/details/46534029一、回顧前面的selectselect優點&#xff1a;目前幾乎在所有的平臺上支持&#xff0c;其良好跨平臺支持也是它的一個優點select缺點&#xff1a;1.每次調用 select()&#xff0c;都需要把 fd 集合從用戶態拷貝到內…

操作系統【一】進程同步和信號量

基本概念 進程異步性特征&#xff1a;各并發執行的進程以各自獨立的&#xff0c;不可預知的速度向前推進。 進程同步又稱作直接制約關系&#xff0c;他是指為完成某種任務而建立的兩個或者多個進程&#xff0c;這些進程因為需要在某些位置上協調他們的工作順序而產生的制約關…

計算機網絡【四】數據鏈路層基本概念+點到點通信(PPP協議)

數據鏈路層基本概念 路由器是網絡層設備 數據鏈路層&#xff1a;數據管道&#xff0c;傳輸的是數據包加上發送地址&#xff0c;接收地址&#xff0c;校驗的數據幀 數據鏈路層的信道類型&#xff1a; 點到點信道&#xff1a;使用一對一的點到點通信方式&#xff08;兩個設備…

Linux網絡編程——tcp并發服務器(poll實現)

https://blog.csdn.net/lianghe_work/article/details/46535859想詳細徹底地了解poll或看懂下面的代碼請參考《Linux網絡編程——I/O復用之poll函數》 代碼&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#…

二分查找的最大比較次數

二分查找很簡單&#xff0c;可是對于一個區間長度為n的數組&#xff0c;最大的比較次數為多少呢&#xff1f; 對于標準的二分查找&#xff0c;我們每次從區間[l,r)中取一個值&#xff0c;和中間值mid(lr)>>1進行比較&#xff0c;然后將數組分為[l,mid) [mid1,r)&#xf…

Linux網絡編程——I/O復用函數之epoll

https://blog.csdn.net/lianghe_work/article/details/46544567一、epoll概述epoll 是在 2.6 內核中提出的&#xff0c;是之前的 select() 和 poll() 的增強版本。相對于 select() 和 poll() 來說&#xff0c;epoll 更加靈活&#xff0c;沒有描述符限制。epoll 使用一個文件描述…

操作系統【三】內存管理基礎+連續內存分配

內存的基礎知識 內存分為按字節編址&#xff08;8位&#xff09;和字編制&#xff08;不同計算機不一樣&#xff0c;64位計算機就是64位&#xff0c;即8個字節&#xff09; 相對地址邏輯地址 絕對地址物理地址 從邏輯地址到物理地址的轉換由裝入解決。 裝入的三種方式 絕對…

MSG_PEEK標志

https://blog.csdn.net/aspnet_lyc/article/details/28937229 MSG_PEEK標志可以用來讀取套接字接收隊列中可讀的數據&#xff0c;一些情況會用到它&#xff0c;比如為了避免不阻塞而先檢查套接字接收隊列中可讀的數據長度&#xff0c;再采取相應操作。當然&#xff0c;不阻塞也…