# *類
## 定義,屬性,初始化,析構(gòu)
#面向?qū)ο?,eg:自己做飯or別人做飯
#面向過程,eg:煮飯=洗菜-切菜-抄菜-出鍋-吃飯
#類 封裝一些共有的事物,把具有共有特點的事物放在一個類里
#命名規(guī)則:駝峰命名法(首字母大寫)
eg:
class GirlFriend:
? ? _sex='女'
? ? hobby='做飯'
? ? __age=18
xiaohua=GirlFriend#此處可加()也可不加,不加括號使用同原地址,加括號另開一空間
ruhua=GirlFriend()
print(xiaohua._sex,xiaohua.hobby)
print(id(xiaohua),id(ruhua))
xiaohua.study='超會學(xué)習(xí)'
ruhua.k='as'#實例(新地址)修改屬性,不會影響原類的屬性
print(ruhua.study)
print(xiaohua.k)#-->報錯
#_sex 一個下劃線 只是做一個簡單的標記,可以正常使用
#__age 兩個下劃線代表特有屬性,實例不能直接訪問,可通過dir查看訪問方式
print(xiaohua.__age)#-->報錯
print(xiaohua._GirlFriend__age)#dir查詢后
#注:python里無絕對私有
## 方法
#類里放函數(shù)既是方法
eg:
class Person:
? ? def __init__(self,name,girlfriend):#魔法方法,在python中以雙下劃線開頭和結(jié)尾的稱為魔法方法 每一個魔法方法都有其特有的作用
? ? ? ? self.name=name#__init__-->作用:初始化,實例化時傳屬性
? ? ? ? self.girlfriend=girlfriend
? ? def num(self):#self 誰去使用self self就是誰
? ? ? ? # print(xiaohong.name)
? ? ? ? # print(self.name)
? ? ? ? print('self的id是%s'%id(self))
? ? ? ? print(self.name)
? ? def op(self):
? ? ? ? print('%s和%s大吃一頓'%(self.name,self.girlfriend))
#xiaohong=Person('1','2')#實例化(實例時無法添加屬性)
#xiaohong.name='xiaohong'#此處self=小紅(實例化后可添加實例屬性)
# xiaohong.num()
# print('小紅的id是%s'%id(xiaohong))
# xiaohei=Person()
# xiaohei.num()#新起一個地址后,self的id值也隨之變化
hans=Person('寒沙','小姐姐')
hans.op()
hans.num()#實例屬性只針對于該實例
# 析構(gòu)
#clear 刪除所有元素 del 釋放該序列空間
#python的垃圾回收機制 程序運行完后所有內(nèi)存空間都會釋放
eg:
# li=[12,3,4]
# del li#釋放掉該空間
# print(li)#報錯
class Person:
? ? def __del__(self):
? ? ? ? print('這里調(diào)用了del方法,在刪除全部指向后')
x=Person()
del x#這里釋放了Preson所以后面不會調(diào)用del方法
print('*'*10)#程序執(zhí)行完后調(diào)用del方法