在Python中搜索对象列表时,如何更改属性

2024-09-25 08:26:36 发布

您现在位置: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


Tags: 方法用户fromimportinput属性printelif
1条回答
网友
1楼 · 发布于 2024-09-25 08:26:36

您可以使用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)

相关问题 更多 >