亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python之面向對象

發布時間:2020-05-19 19:19:22 來源:網絡 閱讀:347 作者:fxl風 欄目:編程語言

1.定義一個類(開辟一個內存空間)

class Role(object):               #定義一個類, class是定義類的語法,Role是類名,(object)是新式類的寫法
    n = 123                #類變量,(存在類的內存)
    name = "類變量"
    def __init__(self, name, role, weapon, life_value=100, money=1000):   #初始化方法(構造方法,構造函數)
        self.name = name        #實例變量(靜態屬性),實例變量的作用域就是實例本身(存在實例的內存)
        self.role = role
        self.weapon = weapon
        self.__life_value = life_value #life前面的兩條下劃線加上之后稱作私有屬性
        self.money = money

    def shot(self):             #類的方法、功能(動態屬性)
        print("shooting...")

    def stat_life(self):
        print("name:%s,weapon:%s,lif_value:%s"%(self.name,self.weapon,self.__life_value))

    def got_shot(self):
        print("ah..., got shot...",self.name)

    def buy_gun(self, gun_name):
        print("%s just bought %s" %(self.name,gun_name))
        print("")

    def __del__(self):     #析構函數,在實例釋放,銷毀(如將實例del或者程序退出)的時候自動執行,不需要去調用,通常用于一些收尾工作,關閉一些數據庫連接和打開的臨時文件
        print("析構函數")

    def __my_test(self):
        print("私有方法")

    def my_test(self):
        self.__my_test()

●  __init__()叫做初始化方法(或構造方法), 在類被調用時,這個方法(雖然它是函數形式,但在類中就不叫函數了,叫方法)會自動執行,進行一些初始化的動作,所以這里寫的__init__(self,name,role,weapon,life_value=100,money=1000)就是要在創建一個角色時給它設置這些屬性。

●  self就是實例本身(r1或者r2...)!實例化時python會自動把這個實例本身通過self參數傳進去。


2.實例化,把一個類變成具體對象的過程叫實例化

#print(Role)                             # 即使不實例化,這個Role類本身也已經存在內存里
r1 = Role("fxl","police","AK47")         #==>Role.__init__(r1,'fxl','police',’AK47’)
r2 = Role("cx","thief","Knife")          #==>Role.__init__(r2,'cx','thief',’Knife’)

●實例化具體過程

# 在內存中開辟一塊空間指向r1這個變量名

# 調用Role這個類并執行其中的__init__(…)方法,相當于Role.__init__(r1,'fxl','police',’AK47’),這樣是為了把'fxl','police',’AK47’這3個值跟剛開辟的r1關聯起來,關聯起來后,你就可以直接r1.name, r1.weapon 這樣來調用。所以這個__init__(…)方法里的,self.name = name , self.role = role 會存到r1的內存空間里。

# 實例化其實就是以類Role為模版,在內存里新開辟一塊空間,存上數據,賦值成一個變量名


3.調用實例中方法

print(r1.name)
r1.shot()
r1.buy_gun("AK47")           #python 會自動幫你轉成 Role.buy_gun(r1,"AK47")


4.類變量和實例變量的區別

print(Role.n)           #不實例化也可以調用類變量
Role.n = 456            #修改類變量
print(Role.n)
print(r1.n,r1.name)     #在實例中也可以調用類變量,但是如果類變量中和實例變量中有相同變量名,會調用實例中的變量,如name,因為它會先在實例本身內存空間找,再去找類的內存空間找
print(r2.n,r2.name)

●  類變量作用:大家共用的屬性,節省開銷(如果全都使用實例變量,那么每實例化一個對象都會新開辟一個內存空間,當實例很多的時候就會消耗內存資源,而類變量只會在類的內存空間存儲一次,每個實例都可以調用)。


6.對實例r1操作

r1.name = "FXL"             #修改實例r1的屬性,對于r2沒影響,因為實例化之后r1新開辟了一個內存空間
print(r1.name)
r1.test1 = "test1"          #給實例r1新增一個屬性
print(r1.name,r1.test1)
del r1.test1                #刪掉實例的屬性
print(r1.test1)


7.私有方法和私有屬性(屬性<->變量):都是在方法或者屬性前面加兩條下劃線__,如上的__life_value屬性。變成私有屬性或方法之后在外部不可直接調用

#print(r1.__life_value)              #對于__life_value屬性,直接調用報錯,顯示沒有這個屬性
#print(r1.__my_test())               #對于__my_test方法,直接調用報錯,顯示沒有這個屬性
print(r1.stat_life())                #但是可以在類內部的方法中調用該屬性,然后再去調用該方法
print(r1.my_test())                  #但是可以在類內部的方法中調用該方法,然后再去調用該方法

總結

●  上面的這個r1 = Role('Alex', 'police', 'AK47’)動作,叫做類的“實例化”, 就是把一個虛擬的抽象的類,通過這個動作,變成了一個具體的對象, 這個對象就叫做實例

●  剛才定義的這個類體現了面向對象的第一個基本特性,封裝,其實就是使用構造方法將內容封裝到某個具體對象中,然后通過對象直接或者self間接獲取被封裝的內容

問題在buy_gun(self, gun_name):等方法中為什么也要賦值給self這個參數?

●因為你在buy_gun(..)方法中可能要訪問r1的一些其它屬性, 比如這里就訪問了r1的名字


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 西乌| 军事| 石家庄市| 明光市| 常熟市| 金坛市| 鄂伦春自治旗| 丽江市| 临清市| 浦城县| 塘沽区| 璧山县| 怀宁县| 墨竹工卡县| 大渡口区| 盐山县| 遂宁市| 故城县| 兴国县| 汶上县| 修文县| 哈密市| 乌兰县| 东光县| 盱眙县| 江津市| 元阳县| 什邡市| 青神县| 彭山县| 确山县| 象山县| 凌源市| 杭锦旗| 尚义县| 宁蒗| 吉隆县| 青州市| 洛阳市| 茶陵县|