簡體   English   中英

打印出 __str__() function 以獲取列表類型 object 的位置

[英]Issue printing out __str__() function for location of a list type object

當為 Manager() class 打印str () function 時,員工列表以 memory 而不是 type(str) 格式打印出對象的位置。 Manager str的 rest 打印得很好,但我不知道如何打印員工列表。 我現在只是使用 GUI 來測試代碼的各個方面。

提前感謝您的寶貴時間。

GUI 上不正確的 output 圖像

import random
from random import randint
from tkinter import *
import tkinter as tk
from tkinter import ttk


class Employees(object):
'''
'''
    num_emps = 0

    def __init__(self, first_name, last_name, pay, emp_id):
        self.first_name = first_name
        self.last_name = last_name

        self.pay = pay
        self.emp_id = self.IdMaker()
        Employees.num_emps += 1

    
    def get_first_name(self):                                                  #Retrieves First Name 
        return self.first_name
    def get_last_name(self):                                                   #Retrieves Last Name 
        return self.last_name
    def get_full_name(self):                                                   #Retrieves Full Name 
        return '{} {}'.format(self.first_name, self.last_name)
    def __str__(self):
        return '{self.emp_id}: {self.first_name} {self.last_name}'.format(self=self)
        #####---ID CLASS---#####
        class IdMaker():
        '''
        '''
        def __init__(self):
            self.emp_id = 'emp_' + ''.join(str(random.randint(0, 9)) for x in range(12))
            self.food_id = 'food_' + ''.join(str(random.randint(0, 9)) for x in range(12))
            self.sanitation_id = 'sani_' + ''.join(str(random.randint(0, 9)) for x in range(12)) 
            self.dinnerWare_id = 'dWare_' + ''.join(str(random.randint(0, 9)) for x in range(12))
        
        def __str__(self):
            if isinstance(self.emp_id, object):
                return '{self.emp_id}'.format(self=self)
            elif isinstance(self.food_id, object):
                return 'food_{self.food_id}'.format(self=self)
            elif isinstance(self.sanitation_id, object):
                return 'sani_{self.sanitation_id}'.format(self=self)
            elif isinstance(self.dinnerWare_id, object):
                return 'sani_{self.dinnerWare_id}'.format(self=self)
            else:
                print('No such object')
#-----------------------------------------------------------------------------


class Manager(Employees):
    def __init__(self, first_name, last_name, pay, emp_id, employees=None):
        super().__init__(first_name, last_name, pay, emp_id)
    
        # if schedule is None:                                  #Schedule
        #     self.schedule = {}
        # else:
        #     self.schedule = schedule
        
        if employees is None:                                   #Employees working for Manager
            self.employees = []
        else:
            self.employees = employees
    def add_emp(self, emp):
        if emp not in self.employees:
            self.employees.append(emp)
    def remove_emp(self, emp):
        if emp in self.employees:
            self.employees.remove(emp)
    def print_emps(self):
        for emp in self.employees:
            print(emp.get_full_name())
    def __str__(self):
        return '{self.emp_id}: {self.first_name} {self.last_name} |Pay - ${self.pay} - {self.employees}'.format(self=self)  

   
class FOH(Manager):
    def __init__(self, first_name, last_name, pay, emp_id):
        Employees.__init__(self, first_name, last_name, pay, emp_id)
        self.pay = pay
        # if schedule is None:                                                   #Schedule 
        #     self.schedule = {}
        # else:
        #     self.schedule = schedule
    def __str__(self):
        return '{self.emp_id}: {self.first_name} {self.last_name} |Pay - ${self.pay}'.format(self=self)


class BOH(Manager):
    def __init__(self, first_name, last_name, pay, emp_id):
        Employees.__init__(self, first_name, last_name, pay, emp_id)
        self.pay = pay
        # if schedule is None:                                                   #Schedule 
        #     self.schedule = {}
        # else:
        #     self.schedule = schedule
    def __str__(self):
        return '{self.emp_id}: {self.first_name} {self.last_name} |Pay - ${self.pay}'.format(self=self)


foh_1 = FOH('Rebecca', 'Peters', 60000, None)
foh_2 = FOH('Becca', 'Peters', 60000, None)
boh_3 = BOH('Beckles', 'Peters', 60000, None)
mgr_1 = Manager('Sean', 'Sheaffer', 90000, None, [foh_1, foh_2, boh_3])
# mgr_1.add_emp([foh_2])
# mgr_1.add_emp([boh_3])
mgr_2 = Manager('Becky', 'Peters', 100000, None, [boh_3])

mgr_2.print_emps()
mgr_1.print_emps() 


#####---GUI CLASS---#####
root = Tk()
root.title('DigiSous')
root.geometry("600x200")
# Creates tab control
tabControl = ttk.Notebook(root)
class GUI(Manager):
    def __init__(self, master, first_name, last_name, pay, emp_id):
        super().__init__(first_name, last_name, pay, emp_id)

        my_frame = Frame(master)
        my_frame.pack()
    
        #Find Employees working for Manager
        self.find_mgr_emps = Button(master, text="Employees", command=self.manager_emps)
        self.find_mgr_emps.pack(pady=20)
    
        self.find_mgr_emps_Entry = Entry(master, width=90, borderwidth=5)
        self.find_mgr_emps_Entry.pack(pady=10)

    def manager_emps(self):
        self.find_mgr_emps_Entry.delete(0, END)
        mgr_emps = mgr_1
        self.find_mgr_emps_Entry.insert(0, mgr_emps)
   
#-----------------------------------------------------------------------------

e = GUI(root, None, None, None, None)
root.mainloop()

每當您打印列表時,您將看到這些對象的__repr__而不是__str__ ,因此一種方法可能是覆蓋__repr__方法以獲得所需的 output,例如:

def __repr__(self):
    return str(self)

另一種方法是在格式化字符串時使用列表理解,如下所示:

class Manager(Employees):
    def __str__(self):
      return '{self.emp_id}: {self.first_name} {self.last_name} |Pay - ${self.pay} - {[str(x) for x in self.employees]}'.format(self=self)  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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