(python)getattr等用法


getattr() 函數用於返回一個對象屬性值;

語法

getattr(object, name[, default])

參數

object -- 對象。
name -- 字符串,對象屬性。
default -- 默認返回值,如果不提供該參數,在沒有對應屬性時,將觸發 AttributeError

返回值:對象的屬性

使用:

class A:
    def __init__(self):
        self.name = 'chen_ke_cheng'
    def method(self):
        print('method print')

# 實例化
Instance = A()
#%%
#如果Instance 對象中有屬性name則打印self.name的值,否則打印'not find'
print(getattr(Instance, 'name', 'not find'))
>> chen_ke_cheng
print(getattr(Instance, 'age', 'not find'))
>> not find
#%%
#如果子函數method,否則打印其地址,否則打印default,優先匹配_init_里的屬性,如果添加self.method='ckc', 則這句話將打印輸出'ckc'
print(getattr(Instance, 'method', 'default'))
>><bound method A.method of <__main__.A object at 0x000001E39B6B1160>>
#如果有子函數method,實例化后運行函數並打印None否則打印default
print(getattr(Instance, 'method', 'default')())
>>method print
     None

 


 

express1 for var in list (if express2) 

語法

for 語句后面跟上一個 if 判斷語句,用於過濾掉那些不滿足條件的結果項。

 

返回值:一般為一個list類型

用法1:express1 for var in list 

def_model = 'LstmModel'
def find_class_by_name(name, modules):
#module 在modules中迭代, 且module 用於判斷有無name屬性,並賦值
  modules = [getattr(module, name, None) for module in modules]
  return next(a for a in modules if a)

#find_class_by_name返回的值為類LstmModel的地址,需要對此類進行實例化,得到類變量model,list中為兩個文件
model = find_class_by_name(def_model,[frame_level_models,video_level_models])()
#則對model類的子函數進行實例化,則運行子函數。
print(model.create_model())
>>LstmModel
     None


#%%
frame_level_models.py

class FrameLevelLogisticModel:
    def create_model(self):
        print('FrameLevelLogisticModel')


class LstmModel:
    def create_model(self):
        print('LstmModel')
#%%
video_level_models.py

class FrameLevelLogisticModel:
    def create_model(self):
        print('FrameLevelLogisticModel')


class ModaModel:
    def create_model(self):
        print('ModaModel')

 

 

用法2:express1 for var in list  if express2

L = [1, 2, 3, 4, 5, 6]
L = [x for x in L if x % 2 != 0]
>>L = [1, 3, 5]

 

next() 返回迭代器的下一個項目

語法

next(iterator[, default])

 

參數

iterator -- 可迭代對象
default -- 可選,用於設置在沒有下一個元素時返回該默認值,如果不設置,又沒有下一個元素則會觸發 StopIteration 異常。

 

用法

# 首先獲得Iterator對象
#注意加括號是產生一個迭代器
#如 g = (x * x for x in range(10)) g = iter([1,2,3,4,5,6....])就是產生一個迭代器
it = iter([1, 2, 3, 4, 5])
# 循環:
while True:
    try:
        # 獲得下一個值:
        x = next(it)
        print(x)
    except StopIteration:
        # 遇到StopIteration就退出循環
        break

>>1
>>2
>>3
....

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM