一、動態操作屬性
1、hasattr(obj, name):檢查obj物件是否包含名為name的屬性或方法;
2、getattr(object, name[, default]):獲取object物件中名為name的屬性的屬性值;
3、setattr(obj, name, value, /):將obj 物件的name 屬性設為value。
class rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def info(self):
return '矩形的面積計算'
c = rectangle(3, 5)
print(hasattr(c, 'width')) #true
print(hasattr(c, 'info')) #true
print(getattr(c, 'width')) #3
print(getattr(c, 'size', 15)) #15
setattr(c, 'width', 12)
print(getattr(c, 'width')) #12
二、屬性__call__
hasattr()函式只能判斷屬性或方法是否存在,無法判斷是屬性還是方法,
可以根據屬性或方法是否含有__call__屬性來確定。
class rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def info(self):
return '矩形的面積計算'
c = rectangle(3, 5)
print(hasattr(c.width, '__call__')) #false
print(hasattr(c.info, '__call__')) #true
def foo():
print(1111)
foo()
foo.__call__()#與foo()相同
反射和屬性
反射的概念 反射遍歷成員 用射呼叫型別成員 屬性概念 attribute 屬性的例項 自定議屬性 三個屬性 二次編輯一次執行 一次編譯後 反射 反射是程式設計的讀取與型別相關聯的元資料的行為。通讀取元資料,可以了解它是什麼型別以及型別的成員。比如類中的屬性,方法,事件等。所屬命名空間system.r...
反射和屬性
反射的概念 反射遍歷成員 用射呼叫型別成員 屬性概念 attribute 屬性的例項 自定議屬性 三個屬性 二次編輯一次執行 一次編譯後 反射 反射是程式設計的讀取與型別相關聯的元資料的行為。通讀取元資料,可以了解它是什麼型別以及型別的成員。比如類中的屬性,方法,事件等。所屬命名空間system.r...
反射和屬性
反射的概念 反射遍歷成員 用射呼叫型別成員 屬性概念 attribute 屬性的例項 自定議屬性 三個屬性 二次編輯一次執行 一次編譯後 反射 反射是程式設計的讀取與型別相關聯的元資料的行為。通讀取元資料,可以了解它是什麼型別以及型別的成員。比如類中的屬性,方法,事件等。所屬命名空間system.r...