乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【Python】 如何動態(tài)添加類屬性與方法

       LibraryPKU 2020-02-15

      一些概念

      涉及到一些基礎(chǔ)概念,本章要討論的相關(guān)術(shù)語。但是有些概念又是一時半會講不清楚,所以筆者盡量找到簡練形象的描述,并附上參考鏈接。 

      • 對象
      • 屬性
      • 方法
      • 實例

       

      類(1) - 《零基礎(chǔ)學(xué)python》(第二版):https://docs./learnpython/206/

       

      對象(object):在面向?qū)ο缶幊讨校∣OP),萬物都是對象。對象應(yīng)該具有屬性(就是上面的狀態(tài),因為屬性更常用)、方法(就是上面的行為,方法跟常被使用)和標(biāo)識。

      既然萬物都是對象,那么,某個具體的人也是對象,這是當(dāng)然的事情。假設(shè)這個具體的人就是德藝雙馨的蒼老師,她是一個對象。這個蒼老師具有哪些特征呢?我錯了,寫到這里發(fā)現(xiàn)不能用蒼老師為對象的例子,因為容易讓讀者不專心學(xué)習(xí)了。我換一個吧,以某個王美女為對象說明(這個王美女完全是虛構(gòu)的,請不要對號入座,更不要想入非非,如果雷同,純屬巧合)

       

      屬性:即狀態(tài)(state),包括這個對象已有的屬性(通常是類里面已經(jīng)定義好的)在加上對象具有的當(dāng)前屬性值(這些屬性往往是動態(tài)的)

      王美女這個對象具有某些特征,眼睛,大;腿,長;皮膚,白。當(dāng)然,既然是美女,肯定還有別的顯明特征,讀者可以自己假設(shè)去。如果用“對象”的術(shù)語來說明,就說這些特征都是她的屬性。也就是說屬性是一個對象做具有的特征,或曰:是什么。。

       

      方法:即行為(behavior),是指一個對象如何影響外界及被外界影響,表現(xiàn)為對象自身狀態(tài)的改變和信息的傳遞。

      王美女除了具有上面的特征之外,她還能做一些事情,比如她能唱歌、會吹拉彈唱等。這些都是她能夠做的事情。用“對象”的術(shù)語來說,就是她的“方法”。即方法就是對象能夠做什么。

       

      :在面向?qū)ο蟪淌皆O(shè)計,類(class)是一種面向?qū)ο笥嬎銠C(jī)編程語言的構(gòu)造,是創(chuàng)建對象的藍(lán)圖,描述了所創(chuàng)建的對象共同的屬性和方法。

      首先要明確,類是對某一群具有同樣屬性和方法的對象的抽象。比如這個世界上有很多長翅膀并且會飛的生物,于是聰明的人們就將它們統(tǒng)一稱為“鳥”——這就是一個類,雖然它也可以稱作“鳥類”。

       

      實例:類僅僅是對物體的抽象描述,并不是某個具體物件.。由類變成一個實例的過程叫做類的實例化。

      在編程界,有這樣一句話,說“類是實例工廠”,什么意思呢?工廠是干什么的?生產(chǎn)物品,比如生產(chǎn)電腦。一個工廠可以生產(chǎn)好多電腦。那么,類,就能“生產(chǎn)”好多實例,所以,它是“工廠”。

       

      定義時添加

      通常在定義類的時候,添加屬性和方法。


      1. class Person(object): #創(chuàng)建類
      2. def __init__(self, name): #構(gòu)造函數(shù)
      3. self.name = name

      4. def getName(self): #類中的方法(函數(shù))
      5. return self.name

      6. def color(self, color):
      7. print "%s is %s" % (self.name, color)

      8. girl = Person('canglaoshi') #實例化
      9. name = girl.getName() #調(diào)用方法(函數(shù))
      10. print "the person's name is: ", name
      11. girl.color("white") #調(diào)用方法(函數(shù))

      12. print "------"
      13. print girl.name #實例的屬性

      __init__()是構(gòu)造函數(shù),在類實例化之后,就立即執(zhí)行了這個構(gòu)造函數(shù)。作為首次初始化使用。

      self 類里面的函數(shù),第一個參數(shù)是self。在類內(nèi)部,就是將所有傳入的數(shù)據(jù)都賦給一個變量,通常這個變量的名字是self。也就是說,self接收實例化的所有數(shù)據(jù),self就是一個實例。

      在函數(shù)外部,類的實例化對象 girl 和函數(shù)內(nèi)部的slef是一回事。girl.name 相當(dāng)于 slef.name

       

      保存并運行

      1. $ python 20701.py
      2. the person's name is: canglaoshi
      3. canglaoshi is white
      4. ------
      5. canglaoshi

       

      動態(tài)添加

       

      有些情況沒有在定義類是添加它的屬性或者方法(比如,我們使用第三方函數(shù)庫的時候)。但可以通過動態(tài)的方法,在程序執(zhí)行的過程中添加。

       

      動態(tài)添加屬性

      第一種:使用對象名.屬性名添加,示例如下:

          p.age = 18


      第二種:使用setattr函數(shù)添加,示例如下:

      1.  if not hasattr(p,'age'):
      2.      setattr(p,'age',18)

      hasattr是用來判斷一個對象是否有某個屬性,而setattr是用來給某個對象添加屬性,并且指定這個屬性的值。

       

       

      動態(tài)添加方法

       

      動態(tài)添加實例方法:


      使用types.MethodType這個方法了,示例代碼如下:

      1. import types
      2. class Person(object):
      3.     def __init__(self,name):
      4.         self.name = name

      5. def run(self):
      6.     print('%s在奔跑' % self.name)

      7. p1 = Person('p1')
      8. p1.run = types.MethodType(run,p1)

      9. p1.run()


      其中types.MethodType的第一個參數(shù)是這個函數(shù)本身,第二個參數(shù)是在調(diào)用run這個函數(shù)的時候,傳給run方法的第一個參數(shù)。

       

      動態(tài)添加類方法:

      添加類方法,是把這個方法添加給類。因此添加類方法的時候不是給對象添加,而是給類添加。

      直接將這個函數(shù)賦值給類就可以了,但是需要使用classmethod裝飾器將這個方法設(shè)置為一個類方法。示例代碼如下:

      1. import types

      2. class Person(object):
      3.     country = 'china'
      4.     def __init__(self,name):
      5.         self.name = name

      6. @classmethod
      7. def run(cls):
      8.     print('%s在奔跑' % cls.country)

      9. Person.run = run
      10. Person.run()


      動態(tài)添加靜態(tài)方法:


      添加靜態(tài)方法,是把這個方法添加給類。因此也是直接給類添加的,并且使用staticmethod這個裝飾器。示例方法如下:

      1. import types

      2. class Person(object):
      3.     country = 'china'
      4.     def __init__(self,name):
      5.         self.name = name

      6. @staticmethod
      7. def run():
      8.     print('在奔跑')

      9. Person.run = run
      10. Person.run()

       

       

      動態(tài)刪除屬性和方法:

      1. del 對象.屬性名
      2. delattr(對象,"屬性名")

       

       

      __slots__限制動態(tài)添加屬性或方法

      示例代碼如下:

      1. class Person(object):
      2.     __slots__ = ('name','age')
      3.     def __init__(self,name):
      4.         self.name = name

      5. p = Person('zhiliao')
      6. setattr(p,'height',180)

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多