2017-02-15 41 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) 
相关问题