python中什麼叫類

藏色散人
發布: 2019-06-24 11:25:46
原創
4722 人瀏覽過

python中什麼叫類

python中什麼叫類別?

可以視為種類或類型的同義字。所有的物件都屬於某一個類,稱為類的實例。

例如:鳥就是"鳥類"的實例。這就是一個有很多子類的一般(抽象)類別:看到的鳥可能屬於子類"百靈鳥"。可以將"鳥類"想像成所有鳥的集合,而"百靈鳥類"是其中的一個子集。當一個物件所屬的類是另外一個物件所屬類的子集時,前者就被稱為後者的子類,所以"百靈鳥類"是"鳥類"的子類,"鳥類"是"百靈鳥類"的超類別

定義子類別只是定義更多方法的過程.

#建立類別

>>> 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
登入後複製

在呼叫foo的setName和greet函數時,foo會自動將自己作為第一個參數傳入函數中,因此命名為self。沒有self的話,成員方法就沒辦法存取他們要對其特性進行操作的物件本身了

特性是可以外部存取的:

>>> foo.name'Nsds'>>> bar.name='Yoda'>>> bar.greet()
Hello,world! I'm Yoda
登入後複製

 特性、函數、方法

self參數事實上正是方法和函數的差別。方法將它們的第一個參數綁定到所屬的實例上,因此這個參數可以不必提供。所以可以將特性綁定到一個普通函數上,這樣就不會有特殊的self參數了:

(特性是物件內部的變量,物件的狀態由它的特性來描述,物件的方法可以改變它的特性,可以直接從物件外部存取特性)

>>> 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上,還是對self參數的存取(仍舊綁定到類別的相同實例上)

>>> class Bird:
    song='Squaawk'
    def sing(self):        print self.song        
>>> bird=Bird()>>> bird.sing()
Squaawk>>> birdsong=bird.sing>>> birdsong()
Squaawk
登入後複製

在名稱前加上雙底線,可以讓方法或特性變成私有(從外部無法存取)

>>> 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: &#39;Secretive&#39; object has no attribute &#39;__inacessible&#39;>>> s.accessible()
The secret message is:
Bet you can&#39;t see me...
登入後複製

 在類別的內部定義中,所有以雙底線開的名字都被"翻譯"成前面加上單底線和類別名稱的形式

>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible>
>>> s._Secretive__inaccessible()
Bet you can&#39;t see me...
登入後複製

類別的命名空間

 定義類別時,所有位於class語句中的程式碼都在特殊的命名空間中執行---類別的命名空間。這個命名空間可由類別內所有成員存取。

類別的定義其實就是執行程式碼區塊

>>> =+=1

        
>>> m1=>>>>>>1
>>> m1.members=2
>>>2
>>> m2=>>>>>>2
>>>>>>3
>>>2
>>>
登入後複製

 新members值寫到了m1的特性中,封鎖了類別範圍內的變數

超類別

>>> 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=[&#39;SPAM&#39;]        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])
[1, 2, 3]>>> s=SPAMFilter()>>> s.init()>>> s.filter([&#39;SPAM&#39;,&#39;SPAM&#39;,&#39;egg&#39;,&#39;name&#39;,&#39;ff&#39;])
[&#39;egg&#39;, &#39;name&#39;, &#39;ff&#39;]
登入後複製

繼承,超類別

>>> 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=[&#39;s&#39;]        
>>> f=Filter()>>> f.init()>>> f.filter([1,2,3])
登入後複製

多個超類別

先繼承的類別中的方法會重寫後繼承的類別中的方法

>>> class C():    def calculate(self,expression):
        self.value=eval(expression)        
>>> class Talker():    def talk(self):        print &#39;Hi,my value is&#39;,self.value        
>>> class TalkingCalculator(C,Talker):    pass>>> tc=TalkingCalculator()>>> tc.calculate(&#39;1+2*3&#39;)>>> tc.talk()
Hi,my value is 7
登入後複製

 相關推薦:《Python教程

以上是python中什麼叫類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板