簡體   English   中英

在Python中搜索對象列表時如何更改屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM