python裡的屬性 Python中的屬性註冊

2021-10-11 05:07:14 字數 1212 閱讀 7716

在閱讀有些python的開源專案原始碼時,會看到某些物件呼叫了乙個方法,但在該物件當中卻又找不到該方法。還可能會看到在呼叫某個方法是並不是直接呼叫而是使用了getattr這個方法;好在現在ide比較智慧型,通常也還能夠關聯找得到該方法;

呼叫物件本身沒有存在的方法屬性、間接呼叫方法,下面看看在python中這是怎麼回事;

在python中有不少內建函式,上面所說的功能正是通過它的內建看書實現的:使用了這麼幾個內建函式:setattr、getattr、hasattr函式;

setattr函式

字面意思,設定屬性值,它的真實作業也只是設定函式值;但它可以給某個物件設定乙個他不存在的屬性並且賦值;

class ten:

def __init__(self, data):

print("init")

def register(name, fn):

setattr(ten, name, fn)

上面定義了乙個類,該類並沒有屬性或除了init方法外其他的方法;定義乙個register方法,該方法用於向ten類中註冊屬性、方法;

t = ten()

呼叫register方法,註冊屬性val,值為5;

register("val", 5)

print(t.val)

列印輸出註冊的屬性val值:5;

定義乙個新類:ops

class ops:

@staticmethod

def add(x, y):

return x + y

在ten類中註冊ops屬性,值為剛定義的類ops;

register("ops", ops)

value= t.ops.add(1, 2)

print(value)

此時可以通過註冊的屬性ops呼叫該屬性的方法;

getattr、hasattr函式

getattr函式用於獲取屬性、hasattr用於檢測某個屬性是否存在;

value = getattr(t, "val")

print(value)

獲取上面註冊的屬性val,輸出值為5;

獲取不存在的屬性會丟擲異常,此時可使用hasattr函式用於判斷屬性是否存在,再做下一步處理;

hasattr(t,"mul")

返回false

hasattr(t,」va」)

返回true

了解了這幾個函式,看到圖中這種**就可以秒懂了。

video buffer裡的屬性

記憶體中從0xb8000h起始的一段位址叫做影象快取 video buffer 0xb8000開始的字元位於螢幕左上角,整個螢幕一共25行,80列。每個字元占用兩個位元組,前乙個位元組是ascii碼,後乙個位元組屬性。屬性如下表 bitusage example 7blinking06 backgr...

Spring bean裡的parent屬性

有乙個test的類,裡面有user屬性和setuser user user 方法,現在用spring的ioc,使用到bean裡的parent屬性。testproxy class org.springframework.transaction.interceptor.transactionproxyf...

css裡的position屬性

position屬性是css裡比較常用的乙個屬性,用於設定html頁面中的定位方法但是這個屬性初學者理解起來可能沒怎麼容易,現在我簡單的講一下這個屬性。position屬性指定乙個元素的定位方法的型別,它的值有5個 我學的時候是4個,但是我後來查相關文件時候又多出來乙個 使用了position後可以...