與反射相關的屬性和方法

2021-09-27 08:51:24 字數 1131 閱讀 1234

一、動態操作屬性

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...