Python 面向對象【1】

對象 = 屬性 + 方法
面向對象特征:
分裝 繼承 多態【不同對象對同一方法響應不同行動】
類定義
class xxx:
....
....
類對象

類對象支持兩種操作:屬性引用和實例化

屬性引用 使用和 Python 中所有的屬性引用一樣的標準語法:類對象名.屬性名

類對象創建后,類命名空間中所有的命名都是有效屬性名。所以如果類定義是這樣:

?

class MyClass:?
  i = 12345
  def f(self):   
    return 'hello world'
?# 實例化類
x = MyClass()
# 訪問類的屬性和方法
print("MyClass 類的屬性 i 為:", x.i)
print("MyClass 類的方法 f 輸出為:", x.f())

以上創建了一個新的類實例并將該對象賦給局部變量 x,x 為空的對象

執行以上程序輸出結果為:

  MyClass 類的屬性 i 為: 12345

  MyClass 類的方法 f 輸出為: hello world

?

類有一個名為 __init__() 的特殊方法(構造方法),該方法在類實例化時會自動調用,像下面這樣:

def __init__(self):
  self.data = []

類定義了 __init__() 方法,類的實例化操作會自動調用 __init__() 方法。如下實例化類 MyClass,對應的 __init__() 方法就會被調用:

x = MyClass()

當然, __init__() 方法可以有參數,參數通過 __init__() 傳遞到類的實例化操作上。例如:

class Complex:
   def __init__(self, realpart, imagpart):
     self.r = realpart
    self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) ? ? ? ? ? ? ? ? ?? # 輸出結果:3.0 -4.5

self代表類的實例,而非類

類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self

class Test:
  def prt(self):
    print(self)
    print(self.__class__)
t = Test()
t.prt()

以上實例執行結果為:

<__main__.Test instance at 0x100771878>
__main__.Test

從執行結果可以很明顯的看出,self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類

?

self 不是 python 關鍵字,我們把他換成xxx 也是可以正常執行的:

class Test:
  def prt(xxx):
    print(xxx)
     print(xxx.__class__)
t = Test()
t.prt()

以上實例執行結果為:

<__main__.Test instance at 0x100771878>
__main__.Test
類的方法

在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self, 且為第一個參數,self 代表的是類的實例?


class people:
??? #定義基本屬性
??? name = ''
??? age = 0
??? #定義私有屬性,私有屬性在類外部無法直接進行訪問
??? __weight = 0
??? #定義構造方法
??? def __init__(self,n,a,w):
??????? self.name = n
??????? self.age = a
??????? self.__weight = w
??? def speak(self):
??????? print("%s 說: 我 %d 歲。" %(self.name,self.age))

# 實例化類
p = people('jike',10,30) ? ? 【類的實例化操作會自動調用 __init__() 方法
p.speak()

執行以上程序輸出結果為:

jike 說:  10 歲。
繼承
class xxx(父類名):
....
....

需要注意圓括號中父類的順序若是基類中有相同的方法名,而在子類使用時未指定,python從左至右搜索

即方法在子類中未找到時,從左到右查找基類中是否包含方法。

?

父類必須與派生類定義在一個作用域內。類定義在另一個模塊中時還可以用表達式

class 派生類名(模塊名.父類名):

?舉例

?

執行以上程序輸出結果為:

ken 說:  10 歲了,我在讀 3 年級



多繼承

class 派生類名(Base1, Base2, Base3):
....
...  

需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索

即方法在子類中未找到時,從左到右查找父類中是否包含方法。

輸出:

我叫 Tim,我是一個演說家,我演講的主題是 Python

?

?

方法重寫

?

子類繼承父類構造函數說明
類屬性與方法

類的私有屬性【不能在外部調用】

__private_attrs兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs

類的方法

在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,且為第一個參數,self 代表的是類的實例。

self 的名字并不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。

類的私有方法【不能在外部調用】

__private_method兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 ,不能在類的外部調用。self.__private_methods

類的專有方法:

  • __init__ : 構造函數,在生成對象時調用
  • __del__ : 析構函數,釋放對象時使用
  • __repr__ : 打印,轉換
  • __setitem__ : 按照索引賦值
  • __getitem__: 按照索引獲取值
  • __len__: 獲得長度
  • __cmp__: 比較運算
  • __call__: 函數調用
  • __add__: 加運算
  • __sub__: 減運算
  • __mul__: 乘運算
  • __truediv__: 除運算
  • __mod__: 求余運算
  • __pow__: 乘方
?另外
# 針對__str__方法的例子:

?

# 各種運算符重載

反向運算符重載:

  • __radd__:?加運算
  • __rsub__:?減運算
  • __rmul__:?乘運算
  • __rdiv__:?除運算
  • __rmod__:?求余運算
  • __rpow__:?乘方

復合重載運算符:

  • __iadd__:?加運算
  • __isub__:?減運算
  • __imul__:?乘運算
  • __idiv__:?除運算
  • __imod__:?求余運算
  • __ipow__:?乘方
?舉例:

#?關于 __name__

#?類的靜態方法、普通方法、類方法

?

?

pass ---占位符,表示稍后輸入

如果子類定義與父類同名的方法或屬性,會自動覆蓋父類的方法或屬性
子類覆蓋父類方法時,若需要父類中該方法中的屬性,則要先調用父類該方法,獲得所需要的屬性,再重寫

1.調用未綁定的父類方法
該重寫方法第一行: 父類名.xxxx(self ---將子類對象傳入)
2.使用super函數
super().父類方法名() ---不需要給定任何父類的名字,自動一層層找出
默認要求,類定義中,方法的第一個參數是self == this,表示不同對象調用該方法時,傳入一個該對象參數,用以區別誰調用此方法
構造方法:_init_(self) ---構造方法,實例化對象的時候會自動調用它,默認參數形式如上,此時不需要實例化的時候給與參數,,,,_init_(self,name) ---此時需要給個參數 xx=Yy(zz)
可以重寫此方法自定義初始化操作

轉載于:https://www.cnblogs.com/expedition/p/10693091.html

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

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

相關文章

【前端面試】HTML5+CSS3初級面試1

最近剛好在看前端的面試&#xff0c;把看到的內容總結一下&#xff0c;方便大家一起學習。 1、簡單說一下對HTML5CSS3的了解。 HTML5和CSS3不僅是兩項新的Web技術標準&#xff0c;而且代表了下一代HTML和CSS技術。其未來的發展前景已經可以預見&#xff0c;那就是HTML5必將被越…

福大軟工 · 第八次作業(課堂實戰)- 項目UML設計(團隊)

1、隊伍信息&#xff1a; 隊伍名稱&#xff1a;彳艮彳亍團隊 學號名本次作業博客鏈接031602219奇豪(隊長)https://www.cnblogs.com/S031602219/p/9822576.html041602209毓明http://www.cnblogs.com/mingsonic/p/9820702.html041602204水源http://www.cnblogs.com/littlenorthwe…

【轉發】實現yolo3模型訓練自己的數據集總結

原文鏈接&#xff1a;實現yolo3模型訓練自己的數據集總結 經過兩天的努力&#xff0c;借鑒網上眾多博客&#xff0c;在自己電腦上實現了使用yolo3模型訓練自己的數據集并進行測試圖片。本文主要是我根據下面參考文章一步步實施過程的總結&#xff0c;可能沒參考文章中那么詳細&…

詳解 vue-cli 的打包配置文件代碼(帶注釋)

一、前言 對于webpack基礎不好&#xff0c;node指令不通的童鞋。估計對自己搭建Vue、react腳手架是相當頭疼的&#xff0c;有種無從下手的感覺。然而&#xff0c;從頭看這2塊&#xff0c;耗時太長&#xff0c;而且說實話得練才行&#xff0c;不練練手看不明白。那大多數人就采取…

NoClassDefFoundError

技術之路最公平也最殘酷的原因是&#xff1a;沒有捷徑&#xff0c;需要日積月累的積累&#xff0c;以及對技術持久的熱情。NoClassDefFoundError這個錯誤一般就兩種情況&#xff1a;1、沒有引入相應的jar包2、兩個jar包中都有這個class&#xff0c;無法確認是引用的哪一個&…

【記錄一下】從0到1 我的python開發之路

請設計實現一個商城系統&#xff0c;商城主要提供兩個功能&#xff1a;商品管理、會員管理。商品管理&#xff1a;- 查看商品列表 - 根據關鍵字搜索指定商品 - 錄入商品會員管理&#xff1a;【無需開發&#xff0c;如選擇則提示此功能不可用&#xff0c;正在開發中&#xff0c;…

Python10/22--面向對象編程/類與對象/init函數

類&#xff1a; 語法: class關鍵字 類名# 類名規范 大寫開頭 駝峰命名法class SHOldboyStudent: # 描述該類對象的特征 school "上海Oldboy" name "矮根" age 68 gender "unknown" # 在定義階段 # 只要包含該類的py被…

Django Form和ModelForm組件

Form介紹 我們之前在HTML頁面中利用form表單向后端提交數據時&#xff0c;都會寫一些獲取用戶輸入的標簽并且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗&#xff0c;比如校驗用戶是否輸入&#xff0c;輸入的長度和格式等正不正確。如果用戶輸…

ESLint 規則詳解

前端界大神 Nicholas C. Zakas 在 2013 年開發的 ESLint&#xff0c;極大地方便了大家對 Javascript 代碼進行代碼規范檢查。這個工具包含了 200 多條 Javascript 編碼規范且運行迅速&#xff0c;是幾乎每個前端項目都必備的輔助工具。可是&#xff0c;這么多規則&#xff0c;每…

全文搜索引擎 ElasticSearch 還是 Solr?

原文鏈接 最近項目組安排了一個任務&#xff0c;項目中用到了全文搜索&#xff0c;基于全文搜索 Solr&#xff0c;但是該 Solr 搜索云項目不穩定&#xff0c;經常查詢不出來數據&#xff0c;需要手動全量同步&#xff0c;而且是其他團隊在維護&#xff0c;依賴性太強&#xff0…

對局匹配

問題描述小明喜歡在一個圍棋網站上找別人在線對弈。這個網站上所有注冊用戶都有一個積分&#xff0c;代表他的圍棋水平。小明發現網站的自動對局系統在匹配對手時&#xff0c;只會將積分差恰好是K的兩名用戶匹配在一起。如果兩人分差小于或大于K&#xff0c;系統都不會將他們匹…

NodeJS作為Web架構中間層的使用

截至2016年12月&#xff0c;中國網民規模已達7.31億。傳統的網站系統是否能夠支撐得起如此龐大的且不斷增長的用戶訪問并且為用戶提供體驗友好的頁面&#xff1f; 一、傳統的前后端&#xff1a; 二、傳統的前后端分離問題&#xff1a; 性能問題&#xff1a; 1、渲染、數據都在…

Springboot項目修改html后不需要重啟---springboot項目的熱部署

一、spring-boot-devtools 在pom中直接引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency> 設置以下兩項&#xff08…

Hibernate中session的get方法和load方法的區別

一.發送SQL時機&#xff1a; load方法采用延遲加載&#xff08;lazy懶加載&#xff09;&#xff0c;執行到這行代碼的時候&#xff0c;不會發送SQL語句&#xff0c;當真正使用這個對象的數據&#xff08;對象的數據不包括主鍵&#xff09;的時候才發送SQL語句&#xff1b; get…

Node.js Web 開發框架大全《中間件篇》

這篇文章與大家分享優秀的 Node.js 中間件模塊。Node 是一個服務器端 JavaScript 解釋器&#xff0c;它將改變服務器應該如何工作的概念。它的目標是幫助程序員構建高度可伸縮的應用程序&#xff0c;編寫能夠處理數萬條同時連接到一個&#xff08;只有一個&#xff09;物理機的…

windows server 2012 流媒體服務器搭建(直播與點播)

IIS Live Smooth Streaming&#xff08;實時平滑流式處理&#xff09;是微軟下一代流媒體解決方案。該技術是在IIS web中集成媒體傳輸平臺IIS media services&#xff0c;實現利用標準 HTTP Web 技術以及高級 Silverlight 功能&#xff0c;確保在互聯上傳輸質量最佳、播放流暢音…

團隊項目第一篇——NABCD

團隊名稱&#xff1a;筑夢之舟 團隊項目名稱&#xff1a;跑跑 N&#xff08;Need&#xff09;需求&#xff1a; 有許多人在跑步時想了解自己的移動軌跡和跑步距離很不便利&#xff0c;無法了解跑步的日程&#xff0c;我們的軟件就是為了更加方便熱愛跑步的人能夠參加到跑步之中…

Vue warn Failed to mount component: template or render function not defined

問題如圖&#xff0c;造成這類的問題一般有這么幾個原因。 代碼的拼寫問題&#xff0c;當然這是最低級的錯誤vue定義的問題&#xff0c;這里我說明兩點 在組件內部定義組件時&#xff0c;template 對應的必須是html字符串引用外部組件時&#xff0c;vue文件必須以template標簽…

Python實現線性回歸2,梯度下降算法

接上篇 4.梯度下降算法 《斯坦福大學公開課 &#xff1a;機器學習課程》吳恩達講解第二課時&#xff0c;是直接從梯度下降開始講解&#xff0c;最后采用向量和矩陣的方式推導了解析解&#xff0c;國內很多培訓視頻是先講解析解后講梯度下降&#xff0c;個人認為梯度下降算法更為…

在centos和redhat上安裝docker

前置條件 64-bit 系統kernel 3.101.檢查內核版本&#xff0c;返回的值大于3.10即可。$ uname -r 2.使用 sudo 或 root 權限的用戶登入終端。 3.卸載舊版本(如果安裝過舊版本的話) $ yum remove docker \docker-common \docker-selinux \docker-engine 4.安裝需要的軟件包 #yum-…