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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 2 类与对象

發(fā)布時(shí)間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 2 类与对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、類與對(duì)象的概念

類即類別、種類,是面向?qū)ο笤O(shè)計(jì)最重要的概念,從一小節(jié)我們得知對(duì)象是特征與技能的結(jié)合體,而類則是一系列對(duì)象相似的特征與技能的結(jié)合體。

那么問題來了,先有的一個(gè)個(gè)具體存在的對(duì)象(比如一個(gè)具體存在的人),還是先有的人類這個(gè)概念,這個(gè)問題需要分兩種情況去看

(1)在現(xiàn)實(shí)世界中:肯定是先有對(duì)象,再有類世界上肯定是先出現(xiàn)各種各樣的實(shí)際存在的物體,然后隨著人類文明的發(fā)展,人類站在不同的角度總結(jié)出了不同的種類,比如

人類、動(dòng)物類、植物類等概念。也就說,對(duì)象是具體的存在,而類僅僅只是一個(gè)概念,并不真實(shí)存在,比如你無法告訴我人類具體指的是哪一個(gè)人。

(2)在程序中:務(wù)必保證先定義類,后產(chǎn)生對(duì)象

這與函數(shù)的使用是類似的:先定義函數(shù),后調(diào)用函數(shù),類也是一樣的:在程序中需要先定義類,后調(diào)用類。不一樣的是:調(diào)用

函數(shù)會(huì)執(zhí)行函數(shù)體代碼返回的是函數(shù)體執(zhí)行的結(jié)果,而調(diào)用類會(huì)產(chǎn)生對(duì)象,返回的是對(duì)象

?

1>把一類事物的靜態(tài)屬性和動(dòng)態(tài)可以執(zhí)行的操作組合在一起所得到的這個(gè)概念就是類 2>類的一個(gè)個(gè)體就是對(duì)象,對(duì)象是具體的,實(shí)實(shí)在在的事物 3>對(duì)象是特征與技能的結(jié)合體,其中特征和技能分別對(duì)應(yīng)對(duì)象的數(shù)據(jù)屬性和方法屬性 4>對(duì)象(實(shí)例)本身只有數(shù)據(jù)屬性,但是python的class機(jī)制會(huì)將類的函數(shù)綁定到對(duì)象上,稱為對(duì)象的方法,或者叫綁定方法,綁定方法唯一綁定一個(gè)對(duì)象,同一個(gè)類的方法綁定到不同的對(duì)象上,屬于不同的方法,內(nèi)存地址都不會(huì)一樣 在類內(nèi)部定義的屬性屬于類本身的,由操作系統(tǒng)只分配一塊內(nèi)存空間,大家公用這一塊內(nèi)存空間 5>創(chuàng)建一個(gè)類就會(huì)創(chuàng)建一個(gè)類的名稱空間,用來存儲(chǔ)類中定義的所有名字,這些名字稱為類的屬性:而類中有兩種屬性:數(shù)據(jù)屬性和函數(shù)屬性,其中類的數(shù)據(jù)屬性是共享給所有對(duì)象的,而類的函數(shù)屬性是綁定到所有對(duì)象的。 6>創(chuàng)建一個(gè)對(duì)象(實(shí)例)就會(huì)創(chuàng)建一個(gè)對(duì)象(實(shí)例)的名稱空間,存放對(duì)象(實(shí)例)的名字,稱為對(duì)象(實(shí)例)的屬性 7>在obj.name會(huì)先從obj自己的名稱空間里找name,找不到則去類中找,類也找不到就找父類…最后都找不到就拋出異常。 8>類的相關(guān)方法:類的相關(guān)方法(定義一個(gè)類,也會(huì)產(chǎn)生自己的名稱空間) 類名.__name__ # 類的名字(字符串) 類名.__doc__ # 類的文檔字符串 類名.__base__ # 類的第一個(gè)父類(在講繼承時(shí)會(huì)講) 類名.__bases__ # 類所有父類構(gòu)成的元組(在講繼承時(shí)會(huì)講) 類名.__dict__ # 類的字典屬性、名稱空間 類名.__module__ # 類定義所在的模塊 類名.__class__ # 實(shí)例對(duì)應(yīng)的類(僅新式類中)1.創(chuàng)建出類會(huì)產(chǎn)生名稱空間,實(shí)例化對(duì)象也會(huì)產(chǎn)生名稱空間。2.用戶自己定義的一個(gè)類,實(shí)際上就是定義了一個(gè)類型,類型與類是統(tǒng)一的。3.用戶先是從自己的命名空間找,如果找不大,在從類的命名空間找。student1.langage = "1111"print(student1.__dict__) ===>先是從自己的命名空間找print(Student.__dict__) ===>然后在從類的命名空間找4.通過類來訪問,訪問的是函數(shù),通過對(duì)象來訪問,訪問的是方法,在類內(nèi)部定義的方式實(shí)際上是綁定到對(duì)象的身上來用的。 <function Student.fun at 0x000000000267DAE8> <bound method Student.fun of <__main__.Student object at 0x0000000002684128>><function Student.fun at 0x00000000025CDAE8> <bound method Student.fun of <__main__.Student object at 0x00000000025D4160>> <bound method Student.fun of <__main__.Student object at 0x00000000025D4198>>5.總結(jié):類的數(shù)據(jù)屬性是大家共有的,而且大家的內(nèi)部地址是一樣的,用的就是一個(gè)類的函數(shù)屬性是綁定到大家身上的,內(nèi)部地址不一樣,綁定方法指的是綁定到對(duì)象身上。綁定方法:綁定到誰的身上,就是給誰用的,誰來調(diào)用就會(huì)自動(dòng)把自己當(dāng)做第一個(gè)參數(shù)傳入。**定義在類內(nèi)部的變量,是所有對(duì)象共有的,id全一樣,**定義在類內(nèi)部的函數(shù),是綁定到所有對(duì)象的,是給對(duì)象來用的,obj.fun()會(huì)把obj本身當(dāng)做一個(gè)參數(shù)來傳遞。6.在類內(nèi)部定義的函數(shù)雖然可以由類來調(diào)用,但是并不是為了給類用的,在類內(nèi)部定義的函數(shù)的目的就是為了綁定到對(duì)象身上的。7.在類的內(nèi)部來說,__init__是類的函數(shù)屬性,但是對(duì)于對(duì)象來說,就是綁定方法。8.命名空間的問題:先從對(duì)象的命名空間找,隨后在從類的命名空間找,隨后在從父類的命名 空間找。 print(student1.x)9.在定義類的時(shí)候,可以想什么先寫什么。

2、定義類

按照上述步驟,我們來定義一個(gè)類

(1)在現(xiàn)實(shí)世界中,先有對(duì)象,再有類

對(duì)象1:李坦克特征:學(xué)校=oldboy姓名=李坦克性別=男年齡=18技能:學(xué)習(xí)吃飯睡覺對(duì)象2:王大炮特征:學(xué)校=oldboy姓名=王大炮性別=女年齡=38技能:學(xué)習(xí)吃飯睡覺對(duì)象3:牛榴彈特征:學(xué)校=oldboy姓名=牛榴彈性別=男年齡=78技能:學(xué)習(xí)吃飯睡覺

(2)在程序中,必須先定義類,后使用類(用來產(chǎn)生對(duì)象)

#在Python中程序中的類用class關(guān)鍵字定義,而在程序中特征用變量標(biāo)識(shí),技能用函數(shù)標(biāo)識(shí),因而類中最常見的無非是:變量和函數(shù)的定義
# 先定義類
class OldboyStudent:school='oldboy'def learn(self):print('is learning')def eat(self):print('is eating')def sleep(self):print('is sleeping')
# 后產(chǎn)生對(duì)象
stu1 = OldboyStudent() stu2 = OldboyStudent() stu3 = OldboyStudent()
print(stu1) print(stu2) print(stu3)

  • ?

  • 類中可以有任意python代碼,這些代碼在類定義階段便會(huì)執(zhí)行,因而會(huì)產(chǎn)生新的名稱空間,用來存放類的變量名與函數(shù)名,可以通過OldboyStudent.__dict__查看
  • 類中定義的名字,都是類的屬性,點(diǎn)是訪問屬性的語法
  • 對(duì)于經(jīng)典類來說我們可以通過該字典操作類名稱空間的名字,但新式類有限制(新式類與經(jīng)典類的區(qū)別我們將在后續(xù)章節(jié)介紹

3、類的使用

3.1、引用類的屬性

?

class OldboyStudent:
school='oldboy'
def learn(self):
print('is learning')

def eat(self):
print('is eating')

def sleep(self):
print('is sleeping')
# 后產(chǎn)生對(duì)象
stu1 = OldboyStudent()
stu2 = OldboyStudent()
stu3 = OldboyStudent()
print(stu1)
print(stu2)
print(stu3)

print(OldboyStudent.school) #查 輸出結(jié)果:oldboy

OldboyStudent.school='Oldboy2' #改
print(OldboyStudent.school)# 輸出結(jié)果:Oldboy2

OldboyStudent.x=1 #增
print(OldboyStudent.x) #輸出結(jié)果 1

del OldboyStudent.x #刪
print(OldboyStudent.x)
輸出結(jié)果:
AttributeError: type object 'OldboyStudent' has no attribute 'x'


3.2、調(diào)用類,或稱為實(shí)例化,得到程序中的對(duì)象

stu1 = OldboyStudent() stu2 = OldboyStudent() stu3 = OldboyStudent() #如此,s1、s2、s3都一樣了,而這三者除了相似的屬性之外還各種不同的屬性,這就用到了__init__
__init__方法 # 用來為對(duì)象定制自己獨(dú)特的屬性 #注意:該方法是在對(duì)象產(chǎn)生之后才會(huì)執(zhí)行,只用來為對(duì)象進(jìn)行初始化操作,可以有任意代碼,但一定不能有返回值 class OldboyStudent:......def __init__(self,name,age,sex):self.name=nameself.sex=sexself.age=age......s1=OldboyStudent('李坦克','',18) #先調(diào)用類產(chǎn)生空對(duì)象s1,然后調(diào)用OldboyStudent.__init__(s1,'李坦克','男',18) s2=OldboyStudent('王大炮','',38) s3=OldboyStudent('牛榴彈','',78)

4、對(duì)象的使用

class OldboyStudent:school = 'oldboy'def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age = agedef learn(self):print('is learning')def eat(self):print('is eating')def sleep(self):print('is sleeping')s1=OldboyStudent('李坦克','',18) #先調(diào)用類產(chǎn)生空對(duì)象s1,然后調(diào)用OldboyStudent.__init__(s1,'李坦克','男',18) s2=OldboyStudent('王大炮','',38) s3=OldboyStudent('牛榴彈','',78) print(s1.__dict__) print(s2.__dict__) print(s3.__dict__)結(jié)果: {'name': '李坦克', 'sex': '', 'age': 18} {'name': '王大炮', 'sex': '', 'age': 38} {'name': '牛榴彈', 'sex': '', 'age': 78}

?

#執(zhí)行__init__,s1.name='牛榴彈',很明顯也會(huì)產(chǎn)生對(duì)象的名稱空間可以用s2.__dict__查看,查看結(jié)果為 {'name': '王大炮', 'age': '', 'sex': 38}s2.name #查,等同于s2.__dict__['name'] s2.name='王三炮' #改,等同于s2.__dict__['name']='王三炮' s2.course='python' #增,等同于s2.__dict__['course']='python' del s2.course #刪,等同于s2.__dict__.pop('course')

5、補(bǔ)充說明

  • 站的角度不同,定義出的類是截然不同的;
  • 現(xiàn)實(shí)中的類并不完全等于程序中的類,比如現(xiàn)實(shí)中的公司類,在程序中有時(shí)需要拆分成部門類,業(yè)務(wù)類等;
  • 有時(shí)為了編程需求,程序中也可能會(huì)定義現(xiàn)實(shí)中不存在的類,比如策略類,現(xiàn)實(shí)中并不存在,但是在程序中卻是一個(gè)很常見的類。
?

?

轉(zhuǎn)載于:https://www.cnblogs.com/foremostxl/p/9571782.html

總結(jié)

以上是生活随笔為你收集整理的python 2 类与对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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