[英]How can i change attribute when searching through list of objects in Python
我有一個程序,該程序讀取帶有數據的文件,然后將數據轉換為對象列表。 用戶可以選擇基於姓名,年齡,物種或性別在列表中進行搜索。 對於所有四種搜索方法,搜索功能完全相同,只是屬性已更改。
我想對所有四個屬性使用相同的方法,只是根據用戶的選擇更改屬性。
# -*- coding: UTF-8 -*-
from Animal import Animal
from searchName import searchName
from searchAge import searchAge
from searchSpecies import searchSpecies
from searchGender import searchGender
def search():
print ("Search for: \n 1. Name \n 2. Age \n 3. Species \n 4. Gender \n")
searchFor = int(input("Answer with number: "))
if searchFor == 1:
searchF = input("Name? ")
searchName(fullset, searchF)
elif searchFor == 2:
searchF = int(input("Age? "))
searchAge(fullset, searchF)
elif searchFor == 3:
searchF = input("Spe? ")
searchSpecies(fullset, searchF)
elif searchFor == 4:
searchF = input("Gender? ")
searchGender(fullset, searchF)
else:
print ("Invalid input")
如果用戶選擇1,則將調用searchName方法:
def searchName(fullset, searchF):
returnVal = print("No match")
i = 0
for djur in fullset:
if fullset[i].name == searchF:
returnVal = print ("Match: ", fullset[i])
break
else:
i += 1
return(returnVal)
如何編寫搜索方法,以便可以輕松地將fullset[i].name
更改為.age
, .species
和.gender
?
您可以使用getattr
方法,該方法按字符串名稱檢索屬性。
getattr(obj, 'attribute_name', default_value)
因此,您的搜索方法如下:
def searchAttribute(fullset, searchF, attribute_name):
returnVal = print("No match")
i = 0
for djur in fullset:
if getattr(obj, 'attribute_name') == searchF:
returnVal = print ("Match: ", fullset[i])
break
else:
i += 1
return(returnVal)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.