溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中類(lèi)是什么意思

發(fā)布時(shí)間:2020-11-17 14:18:31 來(lái)源:億速云 閱讀:164 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了python中類(lèi)是什么意思,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

python中什么叫類(lèi)?

可以視為種類(lèi)或者類(lèi)型的同義詞。所有的對(duì)象都屬于某一個(gè)類(lèi),稱(chēng)為類(lèi)的實(shí)例。

例如:鳥(niǎo)就是"鳥(niǎo)類(lèi)"的實(shí)例。這就是一個(gè)有很多子類(lèi)的一般(抽象)類(lèi):看到的鳥(niǎo)可能屬于子類(lèi)"百靈鳥(niǎo)"??梢詫?quot;鳥(niǎo)類(lèi)"想象成所有鳥(niǎo)的集合,而"百靈鳥(niǎo)類(lèi)"是其中的一個(gè)子集。當(dāng)一個(gè)對(duì)象所屬的類(lèi)是另外一個(gè)對(duì)象所屬類(lèi)的子集時(shí),前者就被稱(chēng)為后者的子類(lèi),所以"百靈鳥(niǎo)類(lèi)"是"鳥(niǎo)類(lèi)"的子類(lèi),"鳥(niǎo)類(lèi)"是"百靈鳥(niǎo)類(lèi)"的超類(lèi)

定義子類(lèi)只是個(gè)定義更多方法的過(guò)程.

創(chuàng)建類(lèi)

>>> class Person:    def setName(self,name):
        self.name=name    def getName(self):        return self.name    def greet(self):        print "Hello,world! I'm %s" % self.name        
>>> foo=Person()>>> bar=Person()>>> foo.setName('Nsds')>>> bar.setName('Ysdy')>>> foo.greet()
Hello,world! I'm Nsds>>> bar.greet()
Hello,world! I'm Ysdy

在調(diào)用foo的setName和greet函數(shù)時(shí),foo自動(dòng)將自己作為第一個(gè)參數(shù)傳入函數(shù)中,因此命名為self。沒(méi)有self的話,成員方法就沒(méi)法訪問(wèn)他們要對(duì)其特性進(jìn)行操作的對(duì)象本身了

特性是可以外部訪問(wèn)的:

>>> foo.name'Nsds'>>> bar.name='Yoda'>>> bar.greet()
Hello,world! I'm Yoda

特性、函數(shù)、方法

self參數(shù)事實(shí)上正是方法和函數(shù)的區(qū)別。方法將它們的第一個(gè)參數(shù)綁定到所屬的實(shí)例上,因此這個(gè)參數(shù)可以不必提供。所以可以將特性綁定到一個(gè)普通函數(shù)上,這樣就不會(huì)有特殊的self參數(shù)了:

(特性是對(duì)象內(nèi)部的變量,對(duì)象的狀態(tài)由它的特性來(lái)描述,對(duì)象的方法可以改變它的特性,可以直接從對(duì)象外部訪問(wèn)特性)

>>> class Class:    def method(self):        print 'I have a self!'

        >>> def function():    print "I don't...">>> s=Class()>>> s.method()
I have a self!>>> s.method=function>>> s.method()
I don't...

變量birdsong引用綁定方法bird.sing上,還是對(duì)self參數(shù)的訪問(wèn)(仍舊綁定到類(lèi)的相同實(shí)例上)

>>> class Bird:
    song='Squaawk'
    def sing(self):        print self.song        
>>> bird=Bird()>>> bird.sing()
Squaawk>>> birdsong=bird.sing>>> birdsong()
Squaawk

在名稱(chēng)前加上雙下劃線,可以讓方法或者特性變?yōu)樗接校◤耐獠繜o(wú)法訪問(wèn))

>>> class Secretive:    def __inaccessible(self):        print "Bet you can't see me..."
    def accessible(self):        print "The secret message is:"
        self.__inaccessible()        
>>> s=Secretive()>>> s.__inacessible()

Traceback (most recent call last):
  File "<pyshell#182>", line 1, in <module>
    s.__inacessible()
AttributeError: 'Secretive' object has no attribute '__inacessible'>>> s.accessible()
The secret message is:
Bet you can't see me...

在類(lèi)的內(nèi)部定義中,所有以雙下劃線開(kāi)的名字都被"翻譯"成前面加上單下劃線和類(lèi)名的形式

>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible>
>>> s._Secretive__inaccessible()
Bet you can't see me...

類(lèi)的命名空間

定義類(lèi)時(shí),所有位于class語(yǔ)句中的代碼都在特殊的命名空間中執(zhí)行---類(lèi)的命名空間。這個(gè)命名空間可由類(lèi)內(nèi)所有成員訪問(wèn)。

類(lèi)的定義其實(shí)就是執(zhí)行代碼塊

>>> =+=1

        
>>> m1=>>>>>>1
>>> m1.members=2
>>>2
>>> m2=>>>>>>2
>>>>>>3
>>>2
>>>

新members值被寫(xiě)到了m1的特性中,屏蔽了類(lèi)范圍內(nèi)的變量

超類(lèi)

>>> class Filter:    def init(self):
        self.blocked=[]    def filter(self,sequence):        return [x for x in sequence if x not in self.blocked]    
>>> class SPAMFilter(Filter):    def init(self):
        self.blocked=['SPAM']        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])
[1, 2, 3]>>> s=SPAMFilter()>>> s.init()>>> s.filter(['SPAM','SPAM','egg','name','ff'])
['egg', 'name', 'ff']

繼承,超類(lèi)

>>> class Filter:    def init(self):
        self.blockes=[]    def filter(self,sequence):        return [x for x in sequence if x not in self.blocked]    
>>> class S(Filter):    def init(self):
        self.blocked=['s']        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])

多個(gè)超類(lèi)

先繼承的類(lèi)中的方法會(huì)重寫(xiě)后繼承的類(lèi)中的方法

>>> class C():    def calculate(self,expression):
        self.value=eval(expression)        
>>> class Talker():    def talk(self):        print 'Hi,my value is',self.value        
>>> class TalkingCalculator(C,Talker):    pass>>> tc=TalkingCalculator()>>> tc.calculate('1+2*3')>>> tc.talk()
Hi,my value is 7

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python中類(lèi)是什么意思內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI