8.類定義、屬性、初始化和析構

? ? ? ? 類定義? ? ? ?

類 是一個獨立存放變量(屬性/方法)的空間

封裝:

類可以把各種對象組織在一起,作為類的屬性,通過 . (點)運算符來調用類中封裝好的對象

屬性:

變量在類中稱為屬性,但是類中的屬性不僅僅只包含變量,函數等其他的對象也可以作為類的屬性

類的定義:關鍵字class

是一類事物的抽象,不是真是存在的。 描繪了該類事物的共性, 例如:“人類”、“貓類”、“狗類

創建實例:

某類事物的具體個體,是該類事物的具體表現,它是真實存在的。 例如:“炎志”是具體的某個“人” ''墨染''是某個具體的’人’ “加菲貓”是具體的某個“貓” ''湯姆貓'' 是某個具體的’貓‘

實例名 = 類名()

?

一個“實例”的“特征”,就是“屬性”

名字不一樣, 身高不一樣, 年齡不一樣, 大小也不一樣

類屬性和實例屬性

類屬性:在類里面定義的屬性,可以通過類和實例訪問

實例屬性:通過實例定義的屬性,只能通 過實例訪問

類的私有屬性

在python中有兩私有屬性,分別是在屬性前加 一個下換線(_) 和 兩個 下劃線(__)

_x: 意義在于喚起用戶的注意,看成私有屬性,類對象和子類可以訪問

__xx:雙前置下劃線,避免與子類中的屬性命名沖突,無法在外部直接訪問

(名字重整所以訪問不到)

?

私有屬性: 在 Python 中, _ 和 __ 的使用 更多的是一種規范/約定, 沒有真正限制的目的

? ? ? 方法? ? ? ?

類中的方法,就是函數

通常,將默認會傳入的那個參數命名為self,用來表示調用這個方法的實例對象本身。

方法總是定義在類中的,但是卻叫“實例方法”,因為它表示該類所有實例所共有的行為

方法的調用和屬性調用一樣,通過點操作符調用,傳參和函數傳參一樣

class Hero(object):def move(self):                     #self代表實例本身,那個實例調用就代表那個實例print("%s走向戰場"%self.name)    #yanzhi.name  #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name)           #在類中定義的方法叫實例方法不叫類方法yanzhi = Hero()
moran = Hero()
yanzhi.name = '炎志'
moran.name = '墨染'
print(yanzhi.name)
yanzhi.move()
yanzhi.skill()
print("=========================================")
print(moran.name)
moran.move()
moran.skill()炎志
炎志走向戰場
炎志使用了技能:砍一刀
=========================================
墨染
墨染走向戰場
墨染使用了技能:砍一刀

? 初始化和析構?

一、初始化”特殊方法

在Python中有很多以雙下劃線開頭且以雙下劃線結尾的固定方法。

他們會在特定的時機被觸發執行。

__init__ 就是其中之一,它會在實例化之后自動被調用。以完成實例的初始化。

class Hero(object):def __init__(self,name,HP):self.name = nameself.HP = HPdef move(self):                     #self代表實例本身,那個實例調用就代表那個實例print("%s走向戰場"%self.name)    #yanzhi.name  #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name)           #在類中定義的方法叫實例方法不叫類方法
yanzhi = Hero('炎志',3000)
moran = Hero('墨染',2500)
print(yanzhi.name)
print(yanzhi.HP)
yanzhi.move()
yanzhi.skill()
print("=========================================")
print(moran.name)
print(moran.HP)
moran.move()
moran.skill()炎志
3000
炎志走向戰場
炎志使用了技能:砍一刀
=========================================
墨染
2500
墨染走向戰場
墨染使用了技能:砍一刀

二、__init__ 的參數傳遞過程

?

三、基于變量計數的對象銷毀機制

當沒有一個變量指向某個對象的時候,Python會自動銷毀這個對象,以便回收內存空間。

del 關鍵字,可以刪除一個變量的指向。

?__del__”就是一個析構函數了,當使用del 刪除對象時,會調用他本身的析構函數。 提示開發者,對象被銷毀了,方便調試。 進行以寫必要的清理工作。

#代碼運行完自動銷毀
class Hero(object):def __init__(self,name,HP):self.name = nameself.HP = HPdef __del__(self):print(self.name,'被銷毀了')def move(self):                     #self代表實例本身,那個實例調用就代表那個實例print("%s走向戰場"%self.name)    #yanzhi.name  #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name)           #在類中定義的方法叫實例方法不叫類方法
yanzhi = Hero('炎志',3000)
moran = Hero('墨染',2500)
print(yanzhi.name)
print(yanzhi.HP)
yanzhi.move()
yanzhi.skill()
print("=========================================")
print(moran.name)
print(moran.HP)
moran.move()
moran.skill()炎志
3000
炎志走向戰場
炎志使用了技能:砍一刀
=========================================
墨染
2500
墨染走向戰場
墨染使用了技能:砍一刀
墨染 被銷毀了
炎志 被銷毀了
class Hero():def __init__(self,name,HP):self.name = nameself.HP = HPdef __del__(self):print(self.name,'被銷毀了')def move(self):print('%s向前移動兩步'%self.name)def skill(self):print('%s使用了一個技能'%self.name)yanzhi = Hero('炎志',3000)
moran = Hero('墨染',3000)
yanzhi.move()
del yanzhi           #主動銷毀
moran.move()
moran.skill() 炎志向前移動兩步
炎志 被銷毀了
墨染向前移動兩步
墨染使用了一個技能
墨染 被銷毀了

?

轉載于:https://www.cnblogs.com/lyh-520/p/9293779.html

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

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

相關文章

GPL以及Copyleft協議使用率下降明顯

根據最新的協議數據分析,不光是GPL,另外一些copyleft(AGPL,LGPL 等等)協議的使用率在不斷下降,并且下降的速度越來越快。 這結果是在意料之中的,因為GPL非常的復雜。越來越多的個人和企業將選擇…

概念模型和關系模型

ER模型(邏輯模型) ER模型的基本元素是:實體、聯系和屬性 實體:是一個數據對象,指應用中可以區別的客觀存在的事物。(ER模型中的實體往往是指實體集) 實體集:指同一類實體構成的集合…

iOS AutoLayout使用技巧

關于ContentCompressionResistance, ContentHugging運用 如下圖效果圖,兩個Label并列在同一排上,左邊label自適應,右邊label(紅色)要使得內容全部展示,如果左邊label內容很少,那么右…

網絡爬蟲--13.數據提取之JSON與JsonPATH

文章目錄一. 前言二. JSON三. json.loads()四. json.dumps()五. json.dump()六. json.load()七. JsonPath八. JsonPath與XPath語法對比九. 案例分析一. 前言 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時…

vs2017生成sqlserver 2017項目出現.Net SqlClient Data Provider: Msg 10343

一、使用vs2017生成sqlserver 2017項目時由于添加的程序集(CLR集成,可以參考后面給出的鏈接進行理解) ,由于安全權限的配置不正確引發以下的問題: SQL72014: .Net SqlClient Data Provider: Msg 10343, Level 14, State 1, Line 1 針對帶有 SAFE 或 EXT…

數據庫系統常用的存取方法

1. B樹索引存取方法 2. Hash索引存取方法 3. 聚簇存取方法

創建型模式二:工廠方法模式

1. 工廠模式介紹 工廠模式(Factory Pattern)的意義就跟它的名字一樣,在面向對象程序設計中,工廠通常是一個用來創建其他對象的對象。工廠模式根據不同的參數來實現不同的分配方案和創建對象。 在工廠模式中,我們在創建…

spring 的4種事務管理(1種編程式+3種聲明式)

見:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4種事務管理(1種編程式事務三種聲明事務) 一、Spring事務的介紹 二、編程式事務xml的配置 注入后直接在service層調用模板的方法使用 三、基于AOP方式的聲明式事務…

如何創造出更優秀的用戶體驗?

對于互聯網公司來說,用戶體驗起到至關重要的作用,能否給用戶留下深刻的印象;開發出的產品是否實用、易用?等等這些都是開發者必將思考的話題。當有用性一樣的時候,大家的競爭重點就是易用性了,這就是互聯網…

java并發編程實戰-第三章-對象的共享

3.1可見性 首先我們需要知道的是,java的線程都有自己獨立的緩存,線程之間進行共享變量的交互是通過自身和緩存和主存的交互實現的。如果線程的每次更改緩存都刷入主存,主存每次被一個線程的緩存修改,都通知所有的線程刷新自身的緩…

GitHub(從安裝到使用)

一、安裝Git for Windows(又名msysgit) 下載地址: https://git-for-windows.github.io/ 在官方下載完后,安裝到Windows Explorer integration的時候,將選項中將“Git Bash here”和“Git GUI here”打對勾。 然后就一直next直到Fi…

Spring事務配置的五種方式和spring里面事務的傳播屬性和事務隔離級別、不可重復讀與幻讀的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 spring事務配置的五種方式 前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過&#x…

Google編程之夏入圍項目公布

Google編程之夏(Google Summer of Code),是由Google公司所主辦的年度程式設計比賽,第一屆從2005年開始。“Summer of Code”之名取自1967年的“夏日之愛”(Summer of Love)風潮。比賽的主要目的是鼓勵學生參…

普通索引 唯一索引 主鍵索引 候選索引

普通索引 最基本的索引類型&#xff0c;沒有唯一性之類的限制。普通索引可以通過以下幾種方式創建&#xff1a; 創建索引&#xff0c;例如CREATE INDEX <索引的名字> ON tablename (列的列表)&#xff1b; 修改表&#xff0c;例如ALTER TABLE tablename ADD INDEX [索引…

Android 基于注解IOC組件化/模塊化的架構實踐

當前參與的項目歷史也很久遠&#xff0c;第一行代碼據說是寫于2014年的某一天&#xff0c;那時Android用的ide還是Eclipse、那時Android還沒有很好的架構指導&#xff08;mvp、mvvm&#xff09;、那時Android最新的版本是5.0、那時Android的Material Design還沒流行……背景隨著…

網絡爬蟲--14.【糗事百科實戰】

文章目錄一. 要求二. 參考代碼一. 要求 爬取糗事百科段子&#xff0c;假設頁面的URL是 http://www.qiushibaike.com/8hr/page/1 使用requests獲取頁面信息&#xff0c;用XPath / re 做數據提取 獲取每個帖子里的用戶頭像鏈接、用戶姓名、段子內容、點贊次數和評論次數 保存到…

bzoj 5369: [Pkusc2018]最大前綴和

Description 小C是一個算法競賽愛好者&#xff0c;有一天小C遇到了一個非常難的問題&#xff1a;求一個序列的最大子段和。 但是小C并不會做這個題&#xff0c;于是小C決定把序列隨機打亂&#xff0c;然后取序列的最大前綴和作為答案。 小C是一個非常有自知之明的人&#xff0c…

微軟:軟件帝王的復興之路

可以說在過去的兩個月IT界所發生的一切都非同尋常&#xff0c;喬布斯辭職了&#xff0c;Google把Motorola并購了&#xff0c;微軟炫了一下Windows 8&#xff0c;還宣布開始用ARM了&#xff0c;Google開始和英特爾合作了&#xff0c;AT&T與T-Mobile的并購也在緊密鑼鼓進行中…

jdbc和odbc區別

ODBC(Open Database Connectivity&#xff0c;開放數據庫互連)是微軟公司開放服務結構(WOSA&#xff0c;Windows Open Services Architecture)中有關數據庫的一個組成部分&#xff0c;它建立了一組規范&#xff0c;并提供了一組對數據庫訪問的標準API&#xff08;應用程序編程接…

事務相關、不可重復讀與幻讀的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 事務內嵌套事務&#xff1a; 1) 都用spring事務時&#xff0c;取決spring采用的事務的隔離級別。 這個默認隔離級別是與具體的數據…