day14-類和對象

一凉逛、類和對象:

1.理論上的定義
類:就是擁有相同功能和相同屬性的對象的集合(類是抽象)
對象:類的實例(對象是具體的)

2.從生活角度
如果說人是一個類兔簇,余婷就是一個對象哲身,肖老師是另外一個對象审丘,馬云也是人這個類的對象
如果說電腦是一個類嵌屎,我桌上的這臺電腦就是一個對象
如果說車是一個類誉裆,具體的一輛車才是它的對象

3.編程思想
面向過程編程:以算法為工具
函數式編程:以函數為工具
面向對象編程:以類和對象為工具(面向生活)

二顿颅、內的聲明:

類:對擁有相同功能(方法)和相同屬性(屬性)的封裝
封裝效果:一個類中可以對多個功能進行封裝(多個函數);封裝多個屬性

1.類的聲明格式
class 類名(父類列表):
類的說明文檔
類的內容

2.說明:
class: 聲明類的關鍵字
類名: 標識符足丢,不能是關鍵字粱腻。駝峰式命名(第一個單詞首字母小寫其他的單詞首字母都大寫),首字母大寫U兜I苄!耀鸦,見名知義
例如:Person柬批、StudentSystem
(父類列表): 這個部分可以省。 這個是繼承語法袖订,可以多繼承
冒號:固定的
類的內容:包括類的方法和類的屬性

3.類中的方法
方法:就是聲明在類的函數
a.對象方法:對象方法需要通過對象來調用氮帐,對象.函數名()
直接寫在類中的方法,自帶一個self參數
b.類方法
c.靜態(tài)方法

4.創(chuàng)建對象
創(chuàng)建類的時候洛姑,系統(tǒng)會默認給我們創(chuàng)建這個類對應的構造方法
構造方法: 類名() --> 創(chuàng)建類對應的對象

# 創(chuàng)建一個類
class Person:
    def eat(self):
        print('人吃飯')

三上沐、構建方法和init方法:

1.構造方法:系統(tǒng)自動創(chuàng)建的,方法名和類名一樣楞艾。用來創(chuàng)建對象
2.init: init方法的功能是用來做初始化和添加對象屬性的
當我們通過構造方法去創(chuàng)建對象的時候参咙,系統(tǒng)會自動調用init方法(不用主動調用init方法)

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

創(chuàng)建對象的過程:調用構造方法在內存中開辟空間創(chuàng)建一個對象龄广,然后用新建的這個對象去調用init方法,
來初始化對象的屬性昂勒。最后才將對象返回

四蜀细、對象屬性:

類中的內容:屬性和方法
1.屬性:(保存值的)
a.對象的屬性:不同的對象,對應的值可能不一樣戈盈,這樣的屬性是對象屬性。屬于對象
類中的對象屬性是聲明在init方法中的谆刨,并且聲明格式是:self.屬性名 = 初值
對象屬性的使用:對象.屬性名
b.類的字段:屬于類的塘娶,所有的對象對應的值是一樣的

2.方法:(保存功能的)
a.對象方法
b.類方法
c.靜態(tài)方法

class Student:
    """學生類"""
    def __init__(self):
        # 聲明對象屬性name, age, id
        self.name = '張三'
        self.age = 0
        self.id = '001'

class Dog:
    """狗類"""
    # 創(chuàng)建Dog的對象的時候,必須傳類型和顏色
    def __init__(self, type1, color1):
        self.type = type1
        self.color = color1

class Computer:
    """電腦類"""
    # 創(chuàng)建對象的時候痊夭,可以讓屬性使用默認值刁岸,也可以使用自己傳的值
    def __init__(self, color1='白色', memory1=0):
        self.color = color1
        self.memory = memory1

練習:寫一個矩形類,擁有屬性長和寬

class Rectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width

五她我、對象屬性的增刪改:

python是動態(tài)語言虹曙,python中類的對象的屬性可以進行增刪的操作

class Person:
    """人類"""
    def __init__(self, name1='張三'):
        self.name = name1
        self.age = 18
        self.height = 160

    p1 = Person()
    p2 = Person()

1.查(獲取屬性的值)

方法一: 對象.屬性
方法二: def getattr(對象, 屬性名, 默認值)
方法三:對象.getattribute(屬性名)

 print(getattr(p1, 'age2'))   # 屬性不存在會報錯
print(getattr(p1, 'age2', 0))   # 屬性不存在可以通過設置默認值,讓程序不崩潰番舆,并且返回默認值

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

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

p1.name = '李四'
setattr(p1, 'age', 20)
 print(p1.age)
p1.__setattr__('height', 170)
print(p1.height)

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

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

4.刪(刪除對象屬性)

注意:刪除值針對指定的對象
方法一: del 對象.屬性
方法二:delattr(對象, 屬性名)
方法三: 對象.delattr(屬性名)

del p1.name
print(p1.name)

delattr(p1, 'age')
 print(p1.age)

p1.__delattr__('height')
 print(p1.height)

 print(p2.name, p2.age)

六酝碳、對象的方法

1.對象方法:
a.什么樣的方法是對象方法:直接聲明在類的函數默認是對象方法,有一個默認參數self
b.對象方法要通過對象來調用:對象.對象方法()
c.對象方法中默認參數self,不需要傳參恨狈。因為在調用這個方法的時候系統(tǒng)會自動將當前對象傳給self疏哗。
哪個對象調用的方法,self就指向誰

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

聲明一個對象方法area
在這兒禾怠,self就是調用area方法的對象返奉。對象能做的事情,self都可以做

    def area(self):
        # print(id(self))
        # print(self.radius)
        # self.radius = 100
        # print('求圓的面積')
        return math.pi * (self.radius ** 2)

練習1:寫一個矩形類吗氏,有長和寬芽偏,有兩個功能,分別是求周長和面積

class Rectangle:
    def __init__(self, length1, width1):
        self.length = length1
        self.width = width1

練習2:寫一個班級類弦讽,班級里面有多個學生的成績(一門)污尉,班級名, 可以獲取班級成績中的最高分

class Class:
    """班級類"""
    def __init__(self, name):
        self.scores = []
        self.name = name

    def highest_score(self):
        if not self.scores:
            return 0
        # max(序列) ---> 獲取序列中元素的最大值
        # min(序列) ---> 獲取序列中元素的最小值
        return max(self.scores)

class1 = Class('python1806')
class1.scores = [23, 45, 77, 54, 89, 90, 34]
print(class1.highest_score())

七、類 的字段:

1.類的屬性叫類的字段
a.什么是類的字段:
類的字段就是聲明在類的里面坦袍,方法的外面的變量
b.什么樣的屬性聲明成類的字段:
屬于類的十厢,對于這個類的所有的對象來說其值是共有的
c.怎么使用:
通過類來使用: 類.字段

class Person:
    # 這個number就是類的字段
    number = 61

練習:寫一個球類,用一個屬性來保存這個類的創(chuàng)建對象的個數

class Ball:
    count = 0

    # 每次創(chuàng)建球的對象都會調用init方法捂齐,所以init方法調用的次數就是Ball創(chuàng)建的對象的個數
    def __init__(self):
        Ball.count += 1

ball1 = Ball()
ball2 = Ball()
print(Ball.count)

八蛮放、 類的方法:

類中的方法:
1.對象方法(實例方法)
聲明的形式:直接聲明在類型
特點:自帶一個不需要主動傳參的默認參數self, 誰來調用指向誰
調用:通過對象來調用

2.類方法
聲明的形式:聲明方法前需要使用@classmethod說明
特點:自帶一個默認參數cls,這個參數調用的時候不需要傳值奠宜。系統(tǒng)自動給他傳包颁。誰調用就指向誰瞻想!,始終指向當前類
調用:通過類來調用 -> 類.類方法()

3.靜態(tài)方法
聲明的形式:聲明方法前需要使用@staticmethod說明
特點: 沒有默認的參數

4.遇到問題怎么來選擇使用哪種方法:
a.只要實現方法的功能需要用到對象的屬性娩嚼,我們就使用對象方法
b.不使用對象方法的前提下蘑险,如果實現功能需要用到類的字段就使用類方法
c.實現功能既不需要對象的屬性,又不需要類的字段就使用靜態(tài)方法
注意:靜態(tài)方法和類方法劃分不用那么嚴格岳悟,靜態(tài)方法能做的類方法可以做佃迄,反之亦然

class Person:
    # 類的字段,存儲人類的數量
    number = 61

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

    @staticmethod
    def show_numer2():
        print('人類的數據是:%d億贵少!' % Person.number)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末呵俏,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子滔灶,更是在濱河造成了極大的恐慌普碎,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件录平,死亡現場離奇詭異麻车,居然都是意外死亡,警方通過查閱死者的電腦和手機斗这,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門动猬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涝影,你說我怎么就攤上這事枣察。” “怎么了燃逻?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵序目,是天一觀的道長。 經常有香客問我伯襟,道長猿涨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任姆怪,我火速辦了婚禮叛赚,結果婚禮上,老公的妹妹穿的比我還像新娘稽揭。我一直安慰自己俺附,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布溪掀。 她就那樣靜靜地躺著事镣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揪胃。 梳的紋絲不亂的頭發(fā)上璃哟,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天氛琢,我揣著相機與錄音,去河邊找鬼随闪。 笑死阳似,一個胖子當著我的面吹牛,可吹牛的內容都是我干的铐伴。 我是一名探鬼主播撮奏,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼当宴!你這毒婦竟也來了挽荡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤即供,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后于微,有當地人在樹林里發(fā)現了一具尸體逗嫡,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年株依,在試婚紗的時候發(fā)現自己被綠了驱证。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡恋腕,死狀恐怖抹锄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情荠藤,我是刑警寧澤伙单,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站哈肖,受9級特大地震影響吻育,放射性物質發(fā)生泄漏。R本人自食惡果不足惜淤井,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一布疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧币狠,春花似錦游两、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渐行,卻和暖如春轰坊,著一層夾襖步出監(jiān)牢的瞬間铸董,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工肴沫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粟害,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓颤芬,卻偏偏與公主長得像悲幅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子站蝠,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容