2017-02-15 89 views
0

我有一個程序可以讀取帶有數據的文件,然後將數據轉換爲對象列表。 用戶可以選擇根據姓名,年齡,種類或性別在列表中進行搜索。 搜索功能對於所有四種搜索方法的工作原理完全相同,只是屬性發生了變化。如何在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

回答

0

您可以使用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) 
相關問題