日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ad09只在一定范围内查找相似对象_23、面向对象编程

發(fā)布時間:2023/11/30 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ad09只在一定范围内查找相似对象_23、面向对象编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄:

  • 對象的概念
  • 類與對象
  • 面向?qū)ο缶幊?ul>
  • 類的定義與實例化
  • 屬性訪問
    • 類屬性與對象屬性
    • 屬性查找順序與綁定方法
    • 小結(jié)
  • 視頻鏈接
  • 一 對象的概念

    ”面向?qū)ο蟆暗暮诵氖恰皩ο蟆倍?#xff0c;而對象的精髓在于“整合“,什么意思?

    所有的程序都是由”數(shù)據(jù)”與“功能“組成,因而編寫程序的本質(zhì)就是定義出一系列的數(shù)據(jù),然后定義出一系列的功能來對數(shù)據(jù)進(jìn)行操作。在學(xué)習(xí)”對象“之前,程序中的數(shù)據(jù)與功能是分離開的,如下

    # 數(shù)據(jù):name、age、sex name='lili' age=18 sex='female'# 功能:tell_info def tell_info(name,age,sex): print('<%s:%s:%s>' %(name,age,sex))# 此時若想執(zhí)行查看個人信息的功能,需要同時拿來兩樣?xùn)|西,一類是功能tell_info,另外一類則是多個數(shù)據(jù)name、age、sex,然后才能執(zhí)行,非常麻煩 tell_info(name,age,sex)

    在學(xué)習(xí)了“對象”之后,我們就有了一個容器,該容器可以盛放數(shù)據(jù)與功能,所以我們可以說:對象是把數(shù)據(jù)與功能整合到一起的產(chǎn)物,或者說”對象“就是一個盛放數(shù)據(jù)與功能的容器/箱子/盒子。

    如果把”數(shù)據(jù)“比喻為”睫毛膏“、”眼影“、”唇彩“等化妝所需要的原材料;把”功能“比喻為眼線筆、眉筆等化妝所需要的工具,那么”對象“就是一個彩妝盒,彩妝盒可以把”原材料“與”工具“都裝到一起

    如果我們把”化妝“比喻為要執(zhí)行的業(yè)務(wù)邏輯,此時只需要拿來一樣?xùn)|西即可,那就是彩妝盒,因為彩妝盒里整合了化妝所需的所有原材料與功能,這比起你分別拿來原材料與功能才能執(zhí)行,要方便的多。

    ? 在了解了對象的基本概念之后,理解面向?qū)ο蟮木幊谭绞骄拖鄬唵魏芏嗔?#xff0c;面向?qū)ο缶幊叹褪且斐鲆粋€個的對象,把原本分散開的相關(guān)數(shù)據(jù)與功能整合到一個個的對象里,這么做既方便使用,也可以提高程序的解耦合程度,進(jìn)而提升了程序的可擴展性(需要強調(diào)的是,軟件質(zhì)量屬性包含很多方面,面向?qū)ο蠼鉀Q的僅僅只是擴展性問題)

    二 類與對象

    類即類別/種類,是面向?qū)ο蠓治龊驮O(shè)計的基石,如果多個對象有相似的數(shù)據(jù)與功能,那么該多個對象就屬于同一種類。有了類的好處是:我們可以把同一類對象相同的數(shù)據(jù)與功能存放到類里,而無需每個對象都重復(fù)存一份,這樣每個對象里只需存自己獨有的數(shù)據(jù)即可,極大地節(jié)省了空間。所以,如果說對象是用來存放數(shù)據(jù)與功能的容器,那么類則是用來存放多個對象相同的數(shù)據(jù)與功能的容器。

    ? 綜上所述,雖然我們是先介紹對象后介紹類,但是需要強調(diào)的是:在程序中,必須要事先定義類,然后再調(diào)用類產(chǎn)生對象(調(diào)用類拿到的返回值就是對象)。產(chǎn)生對象的類與對象之間存在關(guān)聯(lián),這種關(guān)聯(lián)指的是:對象可以訪問到類中共有的數(shù)據(jù)與功能,所以類中的內(nèi)容仍然是屬于對象的,類只不過是一種節(jié)省空間、減少代碼冗余的機制,面向?qū)ο缶幊套罱K的核心仍然是去使用對象。

    ? 在了解了類與對象這兩大核心概念之后,我們就可以來介紹一下面向?qū)ο缶幊汤病?/p>

    三 面向?qū)ο缶幊?/h2>

    3.1 類的定義與實例化

    我們以開發(fā)一個清華大學(xué)的選課系統(tǒng)為例,來簡單介紹基于面向?qū)ο蟮乃枷肴绾尉帉懗绦?/p>

    面向?qū)ο蟮幕舅悸肪褪前殉绦蛑幸玫降?、相關(guān)聯(lián)的數(shù)據(jù)與功能整合到對象里,然后再去使用,但程序中要用到的數(shù)據(jù)以及功能那么多,如何找到相關(guān)連的呢?我需要先提取選課系統(tǒng)里的角色:學(xué)生、老師、課程等,然后顯而易見的是:學(xué)生有學(xué)生相關(guān)的數(shù)據(jù)于功能,老師有老師相關(guān)的數(shù)據(jù)與功能,我們單以學(xué)生為例,

    # 學(xué)生的數(shù)據(jù)有 學(xué)校 名字 年齡 性別# 學(xué)生的功能有 選課

    詳細(xì)的

    # 學(xué)生1:數(shù)據(jù):學(xué)校=清華大學(xué)姓名=李建剛性別=男年齡=28功能:選課# 學(xué)生2:數(shù)據(jù):學(xué)校=清華大學(xué)姓名=王大力性別=女年齡=18功能:選課# 學(xué)生3:數(shù)據(jù):學(xué)校=清華大學(xué)姓名=牛嗷嗷性別=男年齡=38功能:選課

    我們可以總結(jié)出一個學(xué)生類,用來存放學(xué)生們相同的數(shù)據(jù)與功能

    # 學(xué)生類相同的特征:學(xué)校=清華大學(xué)相同的功能:選課

    基于上述分析的結(jié)果,我們接下來需要做的就是在程序中定義出類,然后調(diào)用類產(chǎn)生對象

    class Student: # 類的命名應(yīng)該使用“駝峰體”school='清華大學(xué)' # 數(shù)據(jù)def choose(self): # 功能print('%s is choosing a course' %self.name)

    類體最常見的是變量的定義和函數(shù)的定義,但其實類體可以包含任意Python代碼,類體的代碼在類定義階段就會執(zhí)行,因而會產(chǎn)生新的名稱空間用來存放類中定義的名字,可以打印Student.__dict__來查看類這個容器內(nèi)盛放的東西

    >>> print(Student.__dict__) {..., 'school': '清華大學(xué)', 'choose': <function Student.choose at 0x1018a2950>, ...}

    調(diào)用類的過程稱為將類實例化,拿到的返回值就是程序中的對象,或稱為一個實例

    >>> stu1=Student() # 每實例化一次Student類就得到一個學(xué)生對象 >>> stu2=Student() >>> stu3=Student()

    如此stu1、stu2、stu3全都一樣了(只有類中共有的內(nèi)容,而沒有各自獨有的數(shù)據(jù)),想在實例化的過程中就為三位學(xué)生定制各自獨有的數(shù)據(jù):姓名,性別,年齡,需要我們在類內(nèi)部新增一個__init__方法,如下

    class Student:school='清華大學(xué)'#該方法會在對象產(chǎn)生之后自動執(zhí)行,專門為對象進(jìn)行初始化操作,可以有任意代碼,但一定不能返回非None的值def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age=agedef choose(self): print('%s is choosing a course' %self.name)

    然后我們重新實例出三位學(xué)生

    >>> stu1=Student('李建剛','男',28) >>> stu2=Student('王大力','女',18) >>> stu3=Student('牛嗷嗷','男',38)

    單拿stu1的產(chǎn)生過程來分析,調(diào)用類會先產(chǎn)生一個空對象stu1,然后將stu1連同調(diào)用類時括號內(nèi)的參數(shù)一起傳給Student.__init__(stu1,’李建剛’,’男’,28)

    def __init__(self, name, sex, age):self.name = name # stu1.name = '李建剛'self.sex = sex # stu1.sex = '男'self.age = age # stu1.age = 28

    會產(chǎn)生對象的名稱空間,同樣可以用__dict__查看

    >>> stu1.__dict__ {'name': '李建剛', 'sex': '男', 'age': 28}

    至此,我們造出了三個對象與一個類,對象存放各自獨有的數(shù)據(jù),類中存放對象們共有的內(nèi)容

    存的目的是為了用,那么如何訪問對象或者類中存放的內(nèi)容呢?

    3.2 屬性訪問

    3.2.1 類屬性與對象屬性

    在類中定義的名字,都是類的屬性,細(xì)說的話,類有兩種屬性:數(shù)據(jù)屬性和函數(shù)屬性,可以通過__dict__訪問屬性的值,比如Student.__dict__[‘school’],但Python提供了專門的屬性訪問語法

    插圖:惡搞圖

    >>> Student.school # 訪問數(shù)據(jù)屬性,等同于Student.__dict__['school'] '清華大學(xué)' >>> Student.choose # 訪問函數(shù)屬性,等同于Student.__dict__['choose'] <function Student.choose at 0x1018a2950> # 除了查看屬性外,我們還可以使用Student.attrib=value(修改或新增屬性),用del Student.attrib刪除屬性。

    操作對象的屬性也是一樣

    >>> stu1.name # 查看,等同于obj1.__dict__[‘name'] '李建剛' >>> stu1.course=’python’ # 新增,等同于obj1.__dict__[‘course']='python' >>> stu1.age=38 # 修改,等同于obj1.__dict__[‘a(chǎn)ge']=38 >>> del obj1.course # 刪除,等同于del obj1.__dict__['course']

    3.2.2 屬性查找順序與綁定方法

    對象的名稱空間里只存放著對象獨有的屬性,而對象們相似的屬性是存放于類中的。對象在訪問屬性時,會優(yōu)先從對象本身的__dict__中查找,未找到,則去類的__dict__中查找

    1、類中定義的變量是類的數(shù)據(jù)屬性,是共享給所有對象用的,指向相同的內(nèi)存地址

    # id都一樣 print(id(Student.school)) # 4301108704print(id(stu1.school)) # 4301108704 print(id(stu2.school)) # 4301108704 print(id(stu3.school)) # 4301108704

    2、類中定義的函數(shù)是類的函數(shù)屬性,類可以使用,但必須遵循函數(shù)的參數(shù)規(guī)則,有幾個參數(shù)需要傳幾個參數(shù)

    Student.choose(stu1) # 李建剛 is choosing a course Student.choose(stu2) # 王大力 is choosing a course Student.choose(stu3) # 牛嗷嗷 is choosing a course

    但其實類中定義的函數(shù)主要是給對象使用的,而且是綁定給對象的,雖然所有對象指向的都是相同的功能,但是綁定到不同的對象就是不同的綁定方法,內(nèi)存地址各不相同

    print(id(Student.choose)) # 4335426280print(id(stu1.choose)) # 4300433608 print(id(stu2.choose)) # 4300433608 print(id(stu3.choose)) # 4300433608

    綁定到對象的方法特殊之處在于,綁定給誰就應(yīng)該由誰來調(diào)用,誰來調(diào)用,就會將’誰’本身當(dāng)做第一個參數(shù)自動傳入(方法__init__也是一樣的道理)

    stu1.choose() # 等同于Student.choose(stu1) stu2.choose() # 等同于Student.choose(stu2) stu3.choose() # 等同于Student.choose(stu3)

    綁定到不同對象的choose技能,雖然都是選課,但李建剛選的課,不會選給王大力,這正是”綁定“二字的精髓所在。

    #注意:綁定到對象方法的這種自動傳值的特征,決定了在類中定義的函數(shù)都要默認(rèn)寫一個參數(shù)self,self可以是任意名字,但命名為self是約定俗成的。

    Python中一切皆為對象,且Python3中類與類型是一個概念,因而綁定方法我們早就接觸過

    #類型list就是類 >>> list <class 'list'>#實例化的到3個對象l1,l2,l3 >>> l1=list([1,2,3]) >>> l2=list(['a','b','c']) >>> l3=list(['x','y'])#三個對象都有綁定方法append,是相同的功能,但內(nèi)存地址不同 >>> l1.append <built-in method append of list object at 0x10b482b48> >>> l2.append <built-in method append of list object at 0x10b482b88> >>> l3.append <built-in method append of list object at 0x10b482bc8>#操作綁定方法l1.append(4),就是在往l1添加4,絕對不會將4添加到l2或l3 >>> l1.append(4) #等同于list.append(l1,4) >>> l1 [1,2,3,4] >>> l2 ['a','b','c'] >>> l3 ['x','y']

    3.3.3 小結(jié)

    在上述介紹類與對象的使用過程中,我們更多的是站在底層原理的角度去介紹類與對象之間的關(guān)聯(lián)關(guān)系,如果只是站在使用的角度,我們無需考慮語法“對象.屬性"中”屬性“到底源自于哪里,只需要知道是通過對象獲取到的就可以了,所以說,對象是一個高度整合的產(chǎn)物,有了對象,我們只需要使用”對象.xxx“的語法就可以得到跟這個對象相關(guān)的所有數(shù)據(jù)與功能,十分方便且解耦合程度極高。

    視頻鏈接:

    python快速入門(一)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com

    總結(jié)

    以上是生活随笔為你收集整理的ad09只在一定范围内查找相似对象_23、面向对象编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。