[英]Issue printing out __str__() function for location of a list type object
当为 Manager() class 打印str () function 时,员工列表以 memory 而不是 type(str) 格式打印出对象的位置。 Manager str的 rest 打印得很好,但我不知道如何打印员工列表。 我现在只是使用 GUI 来测试代码的各个方面。
提前感谢您的宝贵时间。
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.