物件可以使用del語句刪掉,刪掉之後將不能再呼叫該物件。
也可以為物件動態的新增方法。但是動態新增的方法,python不會自動的將呼叫者繫結到self上,需要手動繫結(繫結的同時即呼叫)
例如:假設某個類的例項是p,再類外,有乙個準備新增的新方法,叫做newfunc
def newfunc(self):
print("i am a new func.")
p.newmethod1=newfunc#這樣,就為物件p動態地新增了乙個新的方法(newmethod1這個變數名在之前的類中也是不存在的,我們也不用將其寫到類的裡面)
p.newmethod1(p)#手動把呼叫者p繫結到第乙個引數上,注意,這同時就是在呼叫前面的newfunc函式,以後呼叫時都要寫這一句才行。
也可以使用lambda表示式為物件動態新增方法,但是它同樣不會自動繫結呼叫者。
例如:p.newmethod2=lambda self:print("i am a new method.")
p.newmethod2(p)#手動繫結
示例**如下:
class dog():
orign="usa"
def __init__(self,name,gender):
self.name=name
self.gender=gender
def info(self):
print("the dog comes from "+self.orign+".\n"+"its name is "+self.name+".\n"+"its gender is "+self.gender+".\n")
dog_a=dog("hashiqi","male")
dog_a.info()
def attack(self):
print("this dog is kind.")
dog_a.newfunc=attack
dog_a.newfunc(dog_a)
dog_a.newfunc(dog_a)#通過此語句呼叫前面的attack方法
輸出:
the dog comes from usa.
its name is hashiqi.
its gender is male.
this dog is kind.
this dog is kind.
可以看到呼叫了兩次,就輸出了兩句「this dog is kind.」
如果想要自動繫結,可以像下面這段**一樣:
def color(self):
print("its color is black.")
from types import methodtype
dog_a.newfunc2=methodtype(color,dog_a)
dog_a.newfunc2()
dog_a.newfunc2()#這句話可以呼叫前面的color方法,以後每次想用都得這麼寫一句.
輸出:
its color is black.
its color is black.
我更傾向於前面第一種辦法,因為懶,畢竟引入那句話那麼長。
python學習之 動態匯入模組
python 說明 1.函式功能用於動態的匯入模組,主要用於反射或者延遲載入模組。2.import module 相當於import module 舉例說明 首先建立乙個模組目錄lib,然後在目錄內建立乙個模組為 aa.py 模組 為 class c object def str self retu...
物件導向之動態
什麼是多型 多型是同一父類型別,呼叫同乙個方法後,表現出不同的狀態。比如寵物這個類,有吃的方法,它們的子類也都有吃的方法,在呼叫父類吃的方法過程中,根據不同的動物有不同的吃的行為 好處 當程式業務有擴充套件是,使用多型 改動量最小 概念 同一型別,呼叫統一方法,表現出不同狀態。實現方式 方法過載 靜...
python原始碼學習 之 物件建立和物件的行為
在將物件的建立和行為之前,我們先來看一下型別物件,python是弱型別語言,但並不代表python沒有型別,python中處理物件的型別有乙個專門的物件,我們稱之為型別物件,如果不知道物件的型別就無法為物件開闢記憶體空間,因為占用記憶體的大小是物件的元資訊,是物件的基本資訊,這與物件所屬型別密切相關...