Python 面向?qū)ο蠡A(chǔ)

面向?qū)ο蠡A(chǔ)

1認(rèn)識面向?qū)ο?/h2>

1.1什么是類和對象

類是擁有共同屬性和方法的封裝 是抽象,而且相同的屬性的值是不確定的

對象是具體的,而且對應(yīng)的屬性是確定的。比如說如果人是一個(gè)類,隔壁老王就是人的對象。

1.2面向?qū)ο缶幊?/h3>

面向過程編程:一步一步的寫代碼實(shí)現(xiàn)功能 -->工具:邏輯和算法

函數(shù)式編程:面對問題考慮有沒有擁有功能的函數(shù) -->工具:函數(shù)

面向?qū)ο缶幊蹋好鎸栴}考慮有沒有相應(yīng)的對象來解決問題 -->工具:類和對象

2.類的聲明

格式: class 類名(父類):

? 屬性

? 方法

說明:class是python中聲明類的關(guān)鍵字。類名是標(biāo)識符,首字母大寫,駝峰式命名。

屬性是對象屬性和類的字段 用來保存數(shù)據(jù) 方法是聲明在類中的函數(shù) 實(shí)現(xiàn)功能

1.聲明類Person

聲明兩個(gè)對象方法,需要使用兩個(gè)對象來調(diào)動(dòng) #對象方法默認(rèn)都有一個(gè)參數(shù)self,在調(diào)用方法的時(shí)候,這個(gè)參數(shù)不用傳參,系統(tǒng)會(huì)自動(dòng)給他傳參 #誰來調(diào)用這個(gè)方法,self就是誰

class Person():
    '''類的聲明:人類'''
    pass
    def eat(self):
        print('吃飯')
    def sleep(self):
        print('睡覺')

2.聲明對象

通過類的構(gòu)造方法去創(chuàng)建對象(名字和類名同名的方法就是構(gòu)造方法,自動(dòng)生成)
對象名 = 類名()

類的對象可以通過.語法可以使用類中聲明的方法和屬性
對象.方法名() 對象.屬性名

if __name__ == '__main__':

    people1 = Person()
    people1.eat()

    people2 = Person()
    people2.sleep()

3.對象的屬性

對象屬性的聲明

class 類名:
    def __init__(self):
        self.屬性名 = 初值
        self.屬性名2 = 初值

init方法的說明:init是系統(tǒng)自帶的一個(gè)方法,這個(gè)方法不能直接調(diào)用,而是通過類創(chuàng)建對象的時(shí)候系統(tǒng)會(huì)自動(dòng)調(diào)用的方法。init的作用是對對象的屬性的初始化。通過構(gòu)造方法創(chuàng)建對象的時(shí)候,要保證,init方法中除了self以外,其他的參數(shù)都必須有值

4.對象事件的增刪查改

class Stu():
    '''學(xué)生類'''
    def __init__(self,name,sex,age):
        self.name = name
        self.sex = sex
        self.age = age

    def study(self):
        print(self.name+'正在學(xué)習(xí)')
if __name__ == '__main__':
    dog1 = Dog(3,'yellow')

    #1.查
    #方法一:對象.屬性
    print(dog1.age,dog1.color)
    #方法二:對象.getattr(對象名,屬性)
    #對象.__getattribute__(屬性)
    print(dog1.__getattribute__('age'))
    print(getattr(dog1,'age'))

    #設(shè)置一個(gè)默認(rèn)值,如果屬性不存在,返回默認(rèn)值
    print(getattr(dog1,'abc','無名氏'))
    #2.修改
    #方法1  對象.屬性名
    dog1.age = 5
    dog1.color = 'red'
    print(dog1.age,dog1.color)
    #方法2 對象.__setattr__(屬性名,新值)   或者   setattr(對象名,屬性,新值)
    dog1.__setattr__('color','black')
    print(dog1.color)
    setattr(dog1,'color','blue')
    print(dog1.color)


    #3.增加
    #方法1:對象.屬性 = 值(屬性不存在)
    # 注意:屬性是添加給對象的,而不是類的
    dog1.name = 'lili'
    print(dog1.name)

    #方法2 對象.__setattr__(新屬性名,新值)   或者   setattr(對象名,屬性,新值)
    dog1.__setattr__('type','哈士奇')
    print(dog1.type)
    setattr(dog1,'sex','公')
    print(dog1.sex)

    #4.刪除(刪除對象的屬性)
    '''
    方法1:
    del 對象.屬性
    注意:刪除的是刪的某個(gè)具體對象的屬性,不會(huì)影響這個(gè)類的其他對象
    '''
    del dog1.age
    '''
    方法二:對象名.__delattr__(屬性)  或者 delattr(對象,屬性)
    '''

    delattr(dog1,'age')

    stu1 =Stu('小明',18,'男')

    #三種方式獲取姓名,性別,年齡
    print(stu1.name,stu1.sex,stu1.age)
    print(stu1.__getattribute__('name'))
    print(stu1.__getattribute__('sex'))
    print(stu1.__getattribute__('age'))
    print(getattr(stu1,'name'))
    print(getattr(stu1, 'sex'))
    print(getattr(stu1, 'age'))

    stu1.tel = 12345
    print(stu1.tel)
    stu1.age = 20
    print(stu1.age)
    del stu1.sex
    print(getattr(stu1,'sex','不存在sex這個(gè)屬性'))
    stu1.study()

5.slots魔法

slots魔法的功能是約束類中的對象的屬性

str是自定義print(對象)的返回值,方便調(diào)試

# @Author  : Fizzyi
class Person():
    #__slots__ 的功能:約束類中的對象的屬性
    __slots__ = ('name','age','sex')
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        #自定義print(對象)的返回值,方便調(diào)試
        return '人類'


if __name__ == '__main__':
    p1 = Person('小王',20,'男')
    p1.name ='老王'
    print(p1)

6.類中的方法

屬性:對象的屬性(屬性),類的屬性(字段)

對象屬性:屬于對象的,不同的對象對應(yīng)的值可能不一樣,對象屬性通過對象來使用

類的字段:聲明在類中,函數(shù)的外面。類的屬性屬于類,類的字段通過類來使用

方法:對象方法(方法),類方法,靜態(tài)方法

對象方法自帶一個(gè)self參數(shù),一般通過對象去調(diào)用

類方法:1使用@classmethod進(jìn)行修飾

? 2自帶一個(gè)cls參數(shù),并且參數(shù)不用傳參

? 3誰調(diào)用這個(gè)方法,cls就指向誰。類方法要通過類來調(diào)用

靜態(tài)方法:1使用@staticmethod進(jìn)行修飾

? 2沒有默認(rèn)參數(shù)

? 3靜態(tài)方法通過類來調(diào)用

怎么選擇對象方法,類方法,靜態(tài)方法

if:

? 如果實(shí)現(xiàn)函數(shù)的功能需要使用對象的屬性,就聲明成對象方法

Elif:

? 如果實(shí)現(xiàn)函數(shù)的功能需要使用類的字段或者調(diào)用類的方法,就聲明成類方法

Else:

? 如果使用函數(shù)功能既不需要對象的屬性也不需要類的字段就聲明成靜態(tài)方法

class Myperson():

    #number是類的字段
    number = 0

    def __init__(self,name,age):
        #name,age對象屬性
        self.name = name
        self.age = age

    #eat方法是對象方法
    def eat(self,food):
        print(self.name+'吃'+food)

    #聲明類方法,@classmethod
    @classmethod
    def hurt_earth(cls):
        #cls指向的是調(diào)用這個(gè)方法的類,使用cls可以當(dāng)成類來使用。
        pt = cls('張勝男',20) #可以使用cls創(chuàng)建對象
        print(pt.name)
        print(cls.number)
        print('人類破壞環(huán)境')

    #protect_earth()靜態(tài)方法
    @staticmethod
    def protect_earth():
        print('保護(hù)環(huán)境')



if __name__ == '__main__':

    #1.類的字段要用類來使用
    print(Myperson.number)

    #2.對象的屬性要通過對象來使用
    print(Myperson('小敏',20).name)

    #3.對象的方法用對象調(diào)用
    Myperson('小名',20).eat('西瓜')


    #4.類方法通過類來調(diào)用
    Myperson.hurt_earth()

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

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

  • 整理來自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,624評論 0 6
  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,043評論 2 16
  • 文:小為為媽 第一部分 本年實(shí)績 這種對比圖表,是我在寫部門報(bào)告中的主要表現(xiàn)形式。 除了工作,我今年主要的三件事是...
    小為為媽閱讀 603評論 9 11
  • 下午收到齊老師發(fā)來的音標(biāo)書寫體,隨后還有齊老師的附言:你要相信孩子,振宇很棒的!可能,在很多時(shí)候,我真的有...
    彩虹寶兒閱讀 476評論 0 0
  • 嗨!大家好,我是橙子,來自湖南省湘潭市。性格活波開朗,是典型的辣妹子:說話帶速,走路帶風(fēng);熱愛旅行、讀書、畫...
    橙子orange5258閱讀 1,484評論 0 0

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