Python學習之物件的動態性

2021-10-10 03:45:33 字數 1682 閱讀 6454

物件可以使用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中處理物件的型別有乙個專門的物件,我們稱之為型別物件,如果不知道物件的型別就無法為物件開闢記憶體空間,因為占用記憶體的大小是物件的元資訊,是物件的基本資訊,這與物件所屬型別密切相關...