day14-類和對(duì)象

01類和對(duì)象

1、理論上的定義
類:就是擁有相同功能和相同屬性的對(duì)象的集合(類是抽象的)
對(duì)象:類的實(shí)例(對(duì)象是具體的)
2、編程思想
面向過程編程:以算法為工具
函數(shù)式編程:以函數(shù)為工具
面向?qū)ο缶幊蹋阂灶惡蛯?duì)象為工具

02類的聲明

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

2、類的聲明格式

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

3、說明:
class :聲明類的關(guān)鍵字
類名:標(biāo)識(shí)符,不能是關(guān)鍵字。駝峰式命名(第一個(gè)單詞首字母小寫,其他單詞首字母大寫),
(父類列表):這個(gè)部分可以省。這個(gè)是繼承語法,可以多繼承。
冒號(hào):固定的
類的內(nèi)容:包括類的方法和類的屬性

4、類中的方法
方法:就是聲明在類中的函數(shù)
a.對(duì)象方法:對(duì)象方法需要通過對(duì)象來調(diào)用,對(duì)象.函數(shù)名()
b.類方法:直接寫在類中的方法,自帶一個(gè)self參數(shù)。
c.靜態(tài)方法

5.創(chuàng)建對(duì)象
創(chuàng)建類的時(shí)候,系統(tǒng)會(huì)默認(rèn)給我們創(chuàng)建這個(gè)類對(duì)應(yīng)的構(gòu)造方法。
構(gòu)造方法:類名() ---> 創(chuàng)建類對(duì)應(yīng)的對(duì)象。

例子:

# 創(chuàng)建一個(gè)類
class Person:
    """
    人類:

    """
    def eat(self):
        print('人吃飯')
if __name__ == '__main__':

    # 1、創(chuàng)建對(duì)象
    p1 = Person() #創(chuàng)建Person類的對(duì)象,并且將對(duì)象的地址存到地址p1中。
    # 一個(gè)類可以有多個(gè)對(duì)象
    p2 = Person()
    print(id(p1),id(p2))

    # 2、調(diào)用對(duì)象方法
    # 通過對(duì)象調(diào)用對(duì)象方法,默認(rèn)參數(shù)self不需要傳參。系統(tǒng)會(huì)自動(dòng)傳。
    p1.eat()

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

1、構(gòu)造方法:系統(tǒng)自動(dòng)創(chuàng)建的,方法名和類名一樣。用來創(chuàng)建對(duì)象。

2、init:init方法的功能是用來做初始化和添加對(duì)象屬性的
當(dāng)我們通過構(gòu)造方法去創(chuàng)建對(duì)象的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用init方法。

class Dog:
    def __init__(self):
        print('init方法')

class Person:
    # init方法可以添加參數(shù)
    def __init__(self, name):
        print(name)
        print('人類的init方法')

if __name__ == '__main__':
    # 創(chuàng)建對(duì)象的過程:調(diào)用構(gòu)造方法在內(nèi)存中開辟空間創(chuàng)建一個(gè)對(duì)象,然后用新建的這個(gè)對(duì)象去調(diào)用init方法,
    #                   來初始化對(duì)象的屬性,最后才將對(duì)象返回。
    dog1 = Dog()
    dog2 = Dog()

    # 如果類的init方法有參數(shù),通過給構(gòu)造方法傳參類init方法傳參。
    p1 = Person('小明')

04-對(duì)象的屬性

1、類中的內(nèi)容:屬性和方法
屬性:
a.對(duì)象的屬性:不同的對(duì)象,對(duì)應(yīng)的值可能不一樣,這樣的屬性是對(duì)象屬性。屬于對(duì)象
類中的對(duì)象屬性是聲明在init方法中的,并且聲明格式是:self.屬性名 = 初值;
對(duì)象屬性的使用:對(duì)象.屬性名
b.類的字段:屬于類的,所有的對(duì)象對(duì)應(yīng)的值是一樣的
方法:
a.對(duì)象方法
b.類方法
c.靜態(tài)方法

2、python是動(dòng)態(tài)語言,python中類的對(duì)象的屬性可以進(jìn)行增刪的操作
1)、 查(獲取屬性的值)

    方法一:對(duì)象.屬性名
    方法二:getattr(object(對(duì)象), name(屬性名), default=None)
    方法三:對(duì)象.__getattribute__(屬性名)

2、改(修改屬性的值)

 方法一:對(duì)象.屬性 = 新值
 方法二:setattr(p1, 'age', 20)
 方法三:對(duì)象.__setattr__(屬性名,新值)

3、增(添加屬性 ---- 屬性不存在)

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

4、刪(刪除對(duì)象屬性)

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

05-對(duì)象方法

對(duì)象方法:
a、直接聲明在類中的函數(shù)默認(rèn)是對(duì)象方法,有一個(gè)默認(rèn)參數(shù)self。
b、對(duì)象方法要通過對(duì)象來調(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就指向誰。

練習(xí)1、寫一個(gè)矩形類,有長和寬,有兩個(gè)功能,分別是求周長和面積。

class Rect:
    def __init__(self, width, high):
        self.width = width
        self.high = high
    def C(self):
        return 2*(self.width+self.high)
    def Area(self):
        return self.high*self.width
rect1 = Rect(2,3)
print('該矩形的周長是%d,面積是%d'%(rect1.C(),rect1.Area()))

練習(xí)2、寫一個(gè)班級(jí)類,班級(jí)里面有多個(gè)學(xué)生的成績(一門),班級(jí)名,可以獲取成績的最高分

class Class:
    def __init__(self, class_name, score):
        self.class_name = class_name
        self.score = score
    def get_max(self):
        if not self.score:
            return 0
        return max(self.score)
class1 = Class('1班', [35,56,67,78,89,90,43])
print('%s里的最高分是%d'%(class1.class_name,class1.get_max()))

06-類的字段與方法

1、類的屬性叫類的字段
a.什么是類的字段
類的字段就是聲明在類的里面,方法的外面的變量,
b.什么樣的屬性聲明成類的字段:
屬于類的,對(duì)于這個(gè)類的所有的對(duì)象來說,其值是公有的
c.怎么使用:
通過類來使用:類.字段
2、類中的方法
1).對(duì)象方法(實(shí)例方法)
聲明的形式:直接聲明在類型。
特點(diǎn):自帶一個(gè)不需要主動(dòng)傳參的默認(rèn)參數(shù)self,誰來調(diào)用指向誰。
調(diào)用:通過對(duì)象來調(diào)用。
2).類方法
聲明的形式:聲明方法前需要使用@classmethod說明
特點(diǎn):自帶一個(gè)默認(rèn)參數(shù)cls,這個(gè)參數(shù)調(diào)用的時(shí)候不需要傳值。系統(tǒng)自動(dòng)給他傳。誰調(diào)用就指向誰。始終指向當(dāng)前類。

調(diào)用:通過類來調(diào)用 --- 類.類方法()
3).靜態(tài)方法:
聲明形式:聲明方法前需要使用@staticmethod說明
特點(diǎn):沒有默認(rèn)的參數(shù)
調(diào)用:通過類來調(diào)用---類.靜態(tài)方法()
@staticmethod

4).遇到問題怎么來選擇使用哪種方法:
a、大前提:只要實(shí)現(xiàn)方法的功能需要用到對(duì)象的屬性,我們就使用對(duì)象方法。否則就使用靜態(tài)方法或者類方法。
b、不使用對(duì)象方法的前提下,如果實(shí)現(xiàn)功能需要用到類的字段就使用類方法。
c、實(shí)現(xiàn)功能既不需要對(duì)象的屬性,又不需要類的字段就使用靜態(tài)方法。
注意:靜態(tài)方法和類方法劃分不用那么嚴(yán)格,靜態(tài)方法能做的類方法可以做,反之亦然。

實(shí)例:

class Person:
    def object_faunc(self):
        print('對(duì)象方法')

    # 聲明一個(gè)類方法
    @classmethod
    def class_func(cls):
        print('這是一個(gè)類方法')

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


class Person:
    # 類的字段,存儲(chǔ)人類的數(shù)量
    number = 61

    @classmethod
    def show_number(cls):
        print('人類的數(shù)量是%d億'% (cls.number))

    @staticmethod
    def sho_numbers():
        print('人類的數(shù)量是%d億' % (Person.number))
Person.show_number()
Person.sho_numbers()
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、類和對(duì)象: 1.理論上的定義類:就是擁有相同功能和相同屬性的對(duì)象的集合(類是抽象)對(duì)象:類的實(shí)例(對(duì)象是具體的...
    祖國的花朵_3980閱讀 279評(píng)論 0 0
  • 1、理論上的定義: 類:就是擁有相同功能和屬性的對(duì)象的集合。(抽象)對(duì)象:類的實(shí)例(具體) 2、從生活角度 如果說...
    Deathfeeling閱讀 153評(píng)論 0 1
  • 一.類和對(duì)象 1.理論定義:類就是擁有相同功能和相同屬性的對(duì)象的集合(類是抽象的)對(duì)象:類的實(shí)例(對(duì)象是具體的)2...
    葡萄柚子茶閱讀 315評(píng)論 0 1
  • 1.類的聲明 類:對(duì)擁有相同功能(方法)和相同屬性的封裝 封裝效果:一個(gè)類中可以對(duì)多個(gè)功能進(jìn)行封裝(多個(gè)函數(shù));封...
    xaidc閱讀 131評(píng)論 0 0
  • 花開花落,春來春去。 如雨如絲,如夢如幻。 伊人何在,夢里神游。 曾幾何時(shí),執(zhí)手相依。 偎依相望,無限深情。 纏綿...
    漫步仲夏閱讀 457評(píng)論 2 2

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