2016-12-23 1 views
0

Um im Detail zu erklären, habe ich einige Informationen über mehrere Arbeitsstationen. Zum Beispiel habe ich 100 Arbeitsplätze, die einen anderen Namen, eine installierte Anwendung, einen Benutzer und eine Abteilung haben.Suchen Sie in mehreren Instanzen nach Attributwerten und drucken Sie ein anderes Attribut aus derselben Instanz in Python

Ich wollte über mehrere Instanzen nach einem bestimmten Attribut suchen und ein anderes Attribut aus derselben Instanz drucken. Zum Beispiel:

Ich suche nach dem Benutzer "xxxx" und wenn existiert ein anderes Attribut wie den Maschinennamen oder die Abteilung, zu der der "xxxx" Benutzer gehört.

Ich habe versucht, dies zu tun und konnte es für eine Instanz tun, wie in einer Klasse, die Objekt überprüft werden muss, können wir es mit der class.object-Bedingung erwähnen und diese Operation ausführen.

Aber wenn wir mehrere Instanzen haben und nach einem bestimmten Attribut in zufälliger Reihenfolge suchen, ist eine Herausforderung. Ich habe versucht, einen Hinweis zu finden, aber erfolglos. Ich bin ein Anfänger in Python und wenn jemand antworten könnte, wäre hilfreich.

from itertools import count 

class Workstation(object): 
"""Creates an workstation list-object""" 
count = 0 

    def __init__(self, machine_name, graphics, cad, user, dept): 
     self.machine_name = machine_name 
     self.graphics = graphics 
     self.cad = cad 
     self.user = user 
     self.dept = dept 
     Workstation.count += 1 

    def ws_list(self): 
     """showing the machine name with department""" 
     print ('Name:', self.machine_name, 'Department:', self.dept) 


    def total(self): 
     print ('the total count is %d' %Workstation.count) 


    def info(self): 
     print("enter the machine name") 
     dept = raw_input(" ") 
     if dept == self.dept: 
      print ("the department is", self.machine_name) 
     else: 
      print ("the machine is not in the list") 


ws1 = Workstation("xxx", "nVidia Quadro FX 880M", "cad", 123, "IN") 
ws2 = Workstation("yyy", "nVidia Quadro FX 880M", "cae", 456, "US") 
ws3 = Workstation("zzz", "nVidia Quadro FX 880M", "IT", 789, "GE") 

print ws1.machine_name 
print ws1.ws_list() 
print total 

Grüße,

Jay

+0

Was ist das Problem mit dem obigen Code? Kannst du mehr erklären, warum du nicht erfolgreich warst? –

+0

Vielen Dank Pulkit Goyal, eigentlich, wenn Sie die letzten drei Zeilen im Code betrachten, um ein bestimmtes Attribut zu erhalten, würde ich die Instanz wie ws1, ws2 usw. erwähnen, – jay

Antwort

0

Die Workstation Klasse sollte wissen nicht, dass es mehrere Instanzen sind. Verwenden Sie dazu eine list. Hier ist ein Beispiel, eine einfache Liste mit und einen Filter:

class Workstation(object): 
    """Creates an workstation list-object""" 
    def __init__(self, machine_name, graphics, cad, user, dept): 
     self.machine_name = machine_name 
     self.graphics = graphics 
     self.cad = cad 
     self.user = user 
     self.dept = dept 

# this is your database, containing all workstations 
all_ws = [ 
    Workstation("xxx", "nVidia Quadro FX 880M", "cad", 123, "IN"), 
    Workstation("yyy", "nVidia Quadro FX 880M", "cae", 456, "US"), 
    Workstation("zzz", "nVidia Quadro FX 880M", "IT", 789, "GE") 
] 

def filter_by_dept(workstations, dept): 
    """Filters workstations by Department""" 
    # the filtered list is created using a list comprehension 
    return [x for x in workstations if x.dept == dept] 

print("enter the department name") 
dept = raw_input(" ") 

matching_ws = filter_by_dept(all_ws, dept) 

for ws in matching_ws: 
    # a more portable syntax for string formating 
    print('Name: {} Department: {}'.format(self.machine_name, self.dept)) 

# the len() fonction returns the number of items in the list 
print(len(matching_ws)) 

In diesem Beispiel ist die Workstation Klasse nur hat Eigenschaften (keine Methoden). Sie können diese Eigenschaften auch einfach in einer dict speichern, anstatt eine benutzerdefinierte Klasse zu verwenden.

+0

Vielen Dank für die Vorschläge. Während der Ausführung dieses Codes erhielt ich diesen Fehler ..... (AttributError: 'Liste' Objekt hat kein Attribut 'len') ..... vielleicht sollte ich das len Attribut importieren ...? Bitte helfen Sie. – jay

+0

Ich habe die Antwort bearbeitet, konnte sie aber jetzt nicht auf meinem Gerät testen – abstrus

+0

Lesen Sie über Datenstrukturen in Python: https://docs.python.org/3.6/tutorial/datastructures.html – abstrus

Verwandte Themen