Day13-總結(jié)

01-類的聲明

類:就是擁有相同屬性和功能的對象的集合(類是抽象的)
對象:類的實例(對象是具體)

1.類的聲明

語法:
class 類名(父類列表):
類的內(nèi)容

說明:
clas - 聲明類的關(guān)鍵字
類名 - 標識符,不能是關(guān)鍵字扫责;采用駝峰式命名榛鼎,并且首字母大寫

(父類列表) - 繼承語句:可以省略,省略的時候就相當(dāng)于(objct)
類的內(nèi)容 - 主要包含屬性和方法

補:駝峰式命名 - 名字由多個單詞組成公给,通過單詞首字母大寫來區(qū)分不同單詞
見名知義
方法 - 聲明在類中的函數(shù)就是方法

2.屬性和方法

類中的屬性 - 指的是在類中聲明的變量:分為類的字段和對象屬性
類的方法 - 指的是在類中聲明的函數(shù)借帘; 分為對象方法,類的方法和靜態(tài)方法

# 聲明了一個Person類
class Person:
    """人類"""
    num = 61 # 屬性
    def eat(self):  # 方法
        print('人在吃飯淌铐!')
# Person 是類(類就是類型)
print(Person)

3.創(chuàng)建對象

類名() -->創(chuàng)建類對應(yīng)的對象

# 創(chuàng)建Person類的對象xiao_ming
xian_ming = Person()
print(xian_ming)

02-對象方法

1.什么是對象方法

直接聲明在類里面的函數(shù)肺然,并且自帶一個叫self的參數(shù)

2.對象方法的調(diào)用 - 通過對象調(diào)用對象方法

對象.對象方法()

3.self(當(dāng)前對象)

通過對象調(diào)用對象方法的時候,對象方法中的第一個參數(shù)不用傳參腿准,
系統(tǒng)會自動將當(dāng)前對象傳給self
哪個對象調(diào)用的际起,self就是指向誰

注意:當(dāng)前類的對象能做的事情,self都能做

# 聲明Person類
class Person:
    """人類"""
    # 聲明了一個對象方法sleep
    def sleep(self,a):
        print('self:',self)
        print('睡覺',a)
        self.run()
    def run(self):
        # self = p1
        print('跑')
#   創(chuàng)建Person的對象p1
p1 = Person()
print("p1:",p1)
p1.sleep(10)

03-init方法和構(gòu)造方法

1.魔法方法:

python類中吐葱,用開頭并且是結(jié)尾的方法街望,就是魔法方法。
魔法方法不需要主動調(diào)用弟跑,都是自動調(diào)用

2.init方法:

a.是對象方法

b.不需要自己調(diào)用灾前,會被自己調(diào)用

c.專門用來對對象進行初始化

3.構(gòu)造方法

概念:函數(shù)名和類名一樣的函數(shù),就是構(gòu)造方法
當(dāng)我們創(chuàng)建類的時候孟辑,系統(tǒng)會自動創(chuàng)建這個類的構(gòu)造方法哎甲,用來創(chuàng)建對象蔫敲。
當(dāng)我們通過構(gòu)造方法創(chuàng)建對象的時候,系統(tǒng)會自動調(diào)用init方法來對創(chuàng)建好的對象進行初始化

注意:當(dāng)init方法中除了self以外如果需要別的參數(shù)炭玫,那么這些參數(shù)是通過構(gòu)造方法來傳的參
只要調(diào)用了構(gòu)造方法奈嘿,就會產(chǎn)生新的對象(想要對象,調(diào)用構(gòu)造方法)

class Person:
    def __init__(self):
        print('init方法')
p1 = Person()
p2 = Person()

04-對象屬性

1.什么事對象屬性

a.聲明在_init方法中

b.self.屬性名 = 值

c.通過對象使用:對象.屬性

語法:
self.變量名 = 值
說明:變量名就是屬性名吞加,這個變量就是屬性

2.什么樣的屬性應(yīng)該聲明成對象屬性

如果屬性的值會因為對象不同而不一樣裙犹,那這樣的屬性就應(yīng)該聲明成對象屬性。反之就聲明成類的字段

# 情況一:所有對象屬性創(chuàng)建的時候都使用
class Person:
    def __init__(self):
        # 這的name 和age就是Person類的對象屬性
        self.name = ''
        self.age = 0
# 創(chuàng)建對象
p1 = Person()
# 使用對象屬性
p1.name = '張三'
print(p1.name)
p2 = Person()
p2.name = '小紅'
print(p2.name)
# 情況二:創(chuàng)建對象的時候衔憨,決定對象屬性的值
class Person:
    def __init__(self,name1,age =1):
        self.name = name1
        self.age  = age
p11 = Person('李華')
p12 = Person('小花',0)
print(p11.name,p12.name)
print(p11.age,p12.age)
p11.name = '老王'
print(p11.name)
# 練習(xí)叶圃;聲明一個矩形類
class Rect:
    def  __init__(self,width1,length1):
        self.length = length1
        self.width = width1
    # 一個對象方法需不需要除了self以外的其他參數(shù),看實現(xiàn)這個函數(shù)的功能需不需要除了屬性以外的其他數(shù)據(jù)
    def area(self):
        area = self.length * self.width
        return area
p0 = Rect(5,10)
print(p0.area())
#練習(xí):聲明一個Point類巫财,擁有屬性x坐標和y坐標盗似。功能:求兩個點之間的距離
class Point:
    def __init__(self,x1,y1):
        self.x = x1
        self.y = y1

    def distance(self,other):
        return ((self.x - other.x)**2+(self.y -other.y)**2)**0.5
p1 = Point(0,0)
p2 = Point(3,4)
print(p1.distance(p2))

05-對象屬性的增刪改查

class Dog:
    def __init__(self,name,color,type):
        self.name = name
        self.color = color
        self.type = type
dog1 = Dog('旺財','黃色','二哈')

查(獲取對象屬性的值)

獲取指定對象屬性的值

a.對象.屬性名 - 屬性不存在的時候會報錯

b.getattr(對象,屬性名平项,默認值) - 當(dāng)屬性不存在的時候,如果設(shè)置了默認值悍及,程序不崩潰闽瓢,而是返回默認值

print(dog1.name)
print(getattr(dog1,'color'))
print(getattr(dog1,'name1','才才'),type(getattr(dog1,'name1','才才')))

2.增、改

a.對象.屬性 = 值

b.setattr(對象心赶,屬性名扣讼,值)

注意:屬性存在的時候,對應(yīng)的功能是修改屬性的值缨叫。當(dāng)屬性不存在的時候是添加屬性

dog1.name = '大黃' #修改
print(dog1.name)
dog1.sex = '公'   # 添加
print(dog1.sex)

setattr(dog1,'name','熱狗')
print(dog1.name)

setattr(dog1,'name1','豆豆')
print(dog1.name1)

3.刪除

a.del 對象.屬性

del dog1.name
# print(dog1.name) # AttributeError: 'Dog' object has no attribute 'name'
delattr(dog1,'color')
# print(dog1.color)   # AttributeError: 'Dog' object has no attribute 'color'

注意:對象屬性的增刪改查椭符,都是針對指定的那一個對象,不會影響其他對象

4.slots魔法

slots使用來約束當(dāng)前這個類有哪些屬性

class Student:
    # Student 類的對象只能有name耻姥,study_id销钝,age和sex屬性
    __slots__ = ('name','study_id','age','sex')
    def __init__(self,name,age,sex):
        self.name =name
        self.study_id='001'
        self.age = age
        self.sex = sex
stu1 = Student('夏明',18,'男')
stu1.name = '小明'
print(stu1.name)

06-類的字段和內(nèi)置屬性

1.類的字段

a.直接聲明在類的里面,函數(shù)的外面的變量就是類的字段

b.類的字段需要通過類來使用:類.字段

不會因為對象不同而不一樣的數(shù)據(jù)就聲明成類的字段

class Person:
    # 聲明了一個字段number
    number = 61
    def show_number(self):
        print('人類的數(shù)量:%s'%Person.number)
print(Person.number)
Person().show_number()

2.內(nèi)置類屬性

內(nèi)置屬性就是聲明類的時候琐簇,類中已經(jīng)聲明好的屬性(包含類的字段和對象的屬性)

class Dog:
    type = '犬科'
    def __init__(self,name='',age=0,color=''):
        self.name = name
        self.age = age
        self.color = color
    def eat(self,food):
        print('%s在吃%s'%(self.name,food))

    @classmethod
    def shout(cls):
        print('汪汪汪...')

    @staticmethod
    def bite():
        print('狗咬人U艚 !婉商!')

dog1 = Dog('小黑',3,'黑色')

a.類.name - 獲取類的名字(字符串)

class_name = Dog.__name__
print(class_name,type(class_name))

b.對象.class - 獲取對象對應(yīng)的類(結(jié)果是一個類似忧,原來類能做的事情它都可以做)

aa = dog1.__class__
d1 = Dog()
d2 = aa()
print(d1,d2)
print(dog1.__class__.__name__)# 獲取對象對應(yīng)的類的名字

類.dict - 獲取當(dāng)前類的所有類的字段及其對應(yīng)的值
(重點)對象.dict - 將當(dāng)前對象所有的對象屬性及其值轉(zhuǎn)換成字典,key是屬性名丈秩,value是屬性的值

print(Dog.__dict__)
print(dog1.__dict__)

類.bases - 獲取當(dāng)前類的父類(以元祖的形式返回盯捌,元祖中的元素就是類的父類)

print(Dog.__bases__)

類.module - 獲取當(dāng)前類所在的模塊的模塊名

print(Dog.__module__)

類.doc - 獲取類的說明文檔

print(Dog.__doc__)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蘑秽,隨后出現(xiàn)的幾起案子饺著,更是在濱河造成了極大的恐慌箫攀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓶籽,死亡現(xiàn)場離奇詭異匠童,居然都是意外死亡,警方通過查閱死者的電腦和手機塑顺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門汤求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人严拒,你說我怎么就攤上這事扬绪。” “怎么了裤唠?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵挤牛,是天一觀的道長。 經(jīng)常有香客問我种蘸,道長墓赴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任航瞭,我火速辦了婚禮诫硕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刊侯。我一直安慰自己章办,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布滨彻。 她就那樣靜靜地躺著藕届,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亭饵。 梳的紋絲不亂的頭發(fā)上休偶,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音冬骚,去河邊找鬼椅贱。 笑死,一個胖子當(dāng)著我的面吹牛只冻,可吹牛的內(nèi)容都是我干的庇麦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼喜德,長吁一口氣:“原來是場噩夢啊……” “哼山橄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舍悯,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤航棱,失蹤者是張志新(化名)和其女友劉穎睡雇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饮醇,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡它抱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朴艰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片观蓄。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祠墅,靈堂內(nèi)的尸體忽然破棺而出侮穿,到底是詐尸還是另有隱情,我是刑警寧澤毁嗦,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布亲茅,位于F島的核電站,受9級特大地震影響狗准,放射性物質(zhì)發(fā)生泄漏克锣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一腔长、第九天 我趴在偏房一處隱蔽的房頂上張望娶耍。 院中可真熱鬧,春花似錦饼酿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至紊婉,卻和暖如春药版,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喻犁。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工槽片, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肢础。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓还栓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親传轰。 傳聞我的和親對象是個殘疾皇子剩盒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容