2018-09-06 day14總結(jié)

1.類和對(duì)象

定義:

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

2.類的申明

類:對(duì)擁有相同功能(方法)和相同屬性(屬性)的封裝。
封裝效果:一個(gè)類中可以對(duì)多個(gè)功能進(jìn)行封裝(多個(gè)函數(shù));封裝多個(gè)屬性

2.11.類的聲明格式

class 類名(父類列表):
    類的說(shuō)明文檔
    類的內(nèi)容

說(shuō)明
class:聲明類的關(guān)鍵字
類名:標(biāo)識(shí)符,不能是關(guān)鍵字。駝峰式命名(第一個(gè)單詞首字母小寫(xiě)其他的單詞首字母都大寫(xiě)),首字母大寫(xiě)?。。?,見(jiàn)名知義

  例如:Person、StudentSystem

(父類列表): 部分可以省。 這個(gè)是繼承語(yǔ)法,可以多繼承
冒號(hào):固定的
類的內(nèi)容:包括類的方法和類的屬性

3.1構(gòu)造方法和init方法

  • 構(gòu)造方法:系統(tǒng)自動(dòng)創(chuàng)建的,方法名和類名一樣。構(gòu)造方法是用來(lái)創(chuàng)建對(duì)象的
    2**._ _ init_ _: **init方法的功能是用來(lái)做初始化和添加對(duì)象屬性的
    當(dāng)我們通過(guò)構(gòu)造方法去創(chuàng)建對(duì)象的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用init方法(不用主動(dòng)調(diào)用init方法)
class Dog:    
    def _ _init_ _(self,name1,age1):     name1...形參
        self.name=name1    #初始化對(duì)象屬性
        self.age1=age1
     
dog1=Dog('大黃',3)   #通過(guò)構(gòu)造方法創(chuàng)建對(duì)象,并給init函數(shù)傳參

4.對(duì)象屬性及增刪改查

4.1.屬性:是類中的內(nèi)容,(保存值的)

  • 對(duì)象的屬性:不同的對(duì)象,對(duì)應(yīng)的值可能不一樣,這樣的屬性是對(duì)象屬性。屬于對(duì)象

  • 類中的對(duì)象屬性是聲明在init方法中的,并且聲明格式是:self.屬性名 = 初值
    對(duì)象屬性的使用:對(duì)象.屬性名
    4.2 對(duì)象屬性的增刪改查
    python是動(dòng)態(tài)語(yǔ)言,python中類的對(duì)象的屬性可以進(jìn)行增刪的操作

a.查(獲取屬性的值)

方法一: 對(duì)象.屬性

 print(p1.name2)   # 屬性不存在會(huì)報(bào)錯(cuò)

方法二: def getattr(對(duì)象, 屬性名, 默認(rèn)值)

    print(getattr(p1, 'age2'))   # 屬性不存在會(huì)報(bào)錯(cuò)
    print(getattr(p1, 'age2', 0))   # 屬性不存在可以通過(guò)設(shè)置默認(rèn)值,讓程序不崩潰,并且返回默認(rèn)值

方法三:對(duì)象.getattribute(屬性名)

height = p1.__getattribute__('height')

b.改(修改屬性的值,屬性值存在)

方法一:對(duì)象.屬性 = 新值
方法二: 通過(guò)函數(shù) setattr(對(duì)象,屬性名, 新值)
方法三: 對(duì)象.setattr(屬性名, 新值)

    p1.name = '李四'

    setattr(p1, 'age', 20)
    print(p1.age)

    p1.__setattr__('height', 170)
    print(p1.height)

c.增 (添加屬性 -- 屬性不存在)
注意:添加屬性只能給某一個(gè)對(duì)象添加對(duì)應(yīng)的屬性

方法一:對(duì)象.屬性 = 值
方法二: def setattr(對(duì)象,屬性名, 值)
方法三: 對(duì)象.setattr(屬性名, 值)

d.刪(刪除對(duì)象屬性)
注意:刪除只針對(duì)指定的對(duì)象

方法一: del 對(duì)象.屬性
方法二:delattr(對(duì)象, 屬性名)
方法三: 對(duì)象.delattr(屬性名)


51.對(duì)象方法:

  • a.什么樣的方法是對(duì)象方法:直接聲明在類的函數(shù)默認(rèn)是對(duì)象方法,有一個(gè)默認(rèn)參數(shù)self

  • b.對(duì)象方法要通過(guò)對(duì)象來(lái)調(diào)用:對(duì)象.對(duì)象方法()

  • c.對(duì)象方法中默認(rèn)參數(shù)self,不需要傳參。因?yàn)樵谡{(diào)用這個(gè)方法的時(shí)候系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳給self。
    哪個(gè)對(duì)象調(diào)用的方法,self就指向誰(shuí)

import math


class Circle:
    def __init__(self, radius1):
        self.radius = radius1

    # 聲明一個(gè)對(duì)象方法area
    # 在這兒,self就是調(diào)用area方法的對(duì)象。對(duì)象能做的事情,self都可以做
    def area(self):
        # print(id(self))
        # print(self.radius)
        # self.radius = 100
        # print('求圓的面積')
        return math.pi * (self.radius ** 2)

6.類的字段及類的方法

6.1 類的屬性叫類的字段

  • a.什么是類的字段:
    類的字段就是聲明在類的里面,方法的外面的變量
  • b.什么樣的屬性聲明成類的字段:
    屬于類的,對(duì)于這個(gè)類的所有的對(duì)象來(lái)說(shuō)其值是共有的
  • c.怎么使用:
    通過(guò)類來(lái)使用: 類.字段
class Person:
    # 這個(gè)number就是類的字段
    number = 61

6.2類中的方法:

6.21.對(duì)象方法(實(shí)例方法)

  • 聲明的形式:直接聲明在類型
  • 特點(diǎn):自帶一個(gè)不需要主動(dòng)傳參的默認(rèn)參數(shù)self, 誰(shuí)來(lái)調(diào)用指向誰(shuí)
  • 調(diào)用:通過(guò)對(duì)象來(lái)調(diào)用

6.2.2.類方法

  • 聲明的形式:聲明方法前需要使用@classmethod說(shuō)明
  • 特點(diǎn):自帶一個(gè)默認(rèn)參數(shù)cls,這個(gè)參數(shù)調(diào)用的時(shí)候不需要傳值。系統(tǒng)自動(dòng)給他傳。誰(shuí)調(diào)用就指向誰(shuí)!,始終指向當(dāng)前類
  • 調(diào)用:通過(guò)類來(lái)調(diào)用 -> 類.類方法()

6.2.3.靜態(tài)方法

  • 聲明的形式:聲明方法前需要使用@staticmethod說(shuō)明
  • 特點(diǎn): 沒(méi)有默認(rèn)的參數(shù)
  • 調(diào)用: 通過(guò)類來(lái)調(diào)用 -> 類.靜態(tài)方法()
class Class1:
    # 類字段
    number = 100

    # 聲明一個(gè)對(duì)象方法
    def object_func(self):
        print('對(duì)象方法')

    # 聲明一個(gè)類方法
    @classmethod
    def class_func(cls):
        # 通過(guò)cls去使用類的字段
        print('cls:', cls.number)
        # 通過(guò)cls去創(chuàng)建對(duì)象
        tc = cls()
        tc.object_func()
        print('這是一個(gè)類方法')

    @staticmethod
    def static_func():
        print('這是一個(gè)靜態(tài)方法')

c1 = Class1()    # 調(diào)用對(duì)象方法
c1.object_func()

print(Class1.number)    # 調(diào)用類方法
Class1.class_func()

Class1.static_func()   # 調(diào)用靜態(tài)方法

6.2.4.遇到問(wèn)題怎么來(lái)選擇使用哪種方法:

  • a.只要實(shí)現(xiàn)方法的功能需要用到對(duì)象的屬性,我們就使用對(duì)象方法

  • b.不使用對(duì)象方法的前提下,如果實(shí)現(xiàn)功能需要用到類的字段就使用類方法

  • c.實(shí)現(xiàn)功能既不需要對(duì)象的屬性,又不需要類的字段就使用靜態(tài)方法

注意:靜態(tài)方法和類方法劃分不用那么嚴(yán)格,靜態(tài)方法能做的類方法可以做,反之亦然

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,032評(píng)論 2 16
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,672評(píng)論 1 32
  • 自己一個(gè)人久了,擔(dān)心自己變得越來(lái)越不需要另一半,害怕某一天另一人的出現(xiàn)打亂了自己現(xiàn)有的生活節(jié)奏。 可是我內(nèi)心又是多...
    yonancy閱讀 271評(píng)論 0 0
  • 1. 所在的城市今天下起雪來(lái),很意外。出去買個(gè)早餐就回來(lái)宅在房間里,下午出門看書(shū),雪已經(jīng)過(guò)去,寒意仍在。在這樣的天...
    二月如夕閱讀 499評(píng)論 4 9
  • 枕情:情以為夢(mèng),枕以為惜。
    靜書(shū)先生閱讀 87評(píng)論 0 1

友情鏈接更多精彩內(nèi)容