【发布时间】:2022-08-22 16:06:39
【问题描述】:
我正在尝试用 Python 制作一个简单的库 OOP 程序。结构如下:
具有属性的类书籍(对象)
class Books(object):
book_id=\"\"
book_title=\"\"
Books=[book_id,book_title]
def __init__(self,book_id,book_title):
self.book_id = book_id
self.book_title = book_title
#Books=[book_id,book_title]
book2= Books(\'1504231\',\'Murders\')
print(book1.__str__())
类 BookList(Books) 与类 Books 创建的对象
class BookList(Books):
def __init__(self):
self.listbook = []
book_list= BookList()
book_list.add_book_object(book2)
book_list.show_books()
(此范围内的操作对我有用)
具有属性的类用户(对象)(类似于书籍的 def 和 init)
user1= Users (\'adfelko\',\'Adam\')
print(user1.__str__())
类 UserList(Users),其对象由类 Users 创建(类似于 BookList 的 def 和 init)
user_list= UserList()
user_list.add_user_object(user1)
user_list.show_users()
(此范围内的操作对我有用)
现在,我正在尝试创建实际的 Lease 类,它将保存对象字典(每个对象=每个租约,每个租约 = [用户对象,书籍对象])
这是我的尝试:
#Definition of class Leases
class Leases(Users,Books):
#Set constructor
def __init__(self,user,book):
self.leases = [user,book]
#Create a lease
def borrow_book_to_user(self,u_name,t_book):
user=u_name
book=t_book
lease = [user,book]
self.leases.append(lease)
#Show lease
def __str__(self):
print(self)
也许我对使用它有一个不好的概念,不确定,但我可能不应该通过列表 - BookList 和 UserList ? 或者我应该如何连接它并能够调用以前类的函数? 现在的事情是:
lease= Leases(user1,book2)
lease.__str__()
但输出看起来像这样:
[<__main__.Users object at 0x0000010E69BFE280>, <__main__.Books object at 0x0000010E69BFE1F0>]
我想直接输出:
[ [\'adfelko\',\'Adam\'],[\'1504231\',\'Murders\'] ]
有可能从 Leases 类访问和更改此用户或图书对象的属性,有人可以在这里提供帮助吗? 谢谢 此致 更新: @guimoute 感谢您的评论!它没有帮助解决,但帮助我更深入地理解。
我不得不重新考虑我对 Leases 类的使用(其他东西保持不变):
#Definition of class leases
class Leases():
#Set constructor
def __init__(self):
self.leases = []
#Create lease object
def add_lease_object(self,user,book):
lease = { user : book}
self.leases.append(lease)
#Create lease object
def del_lease_object(self,user,book):
lease = { user : book}
self.leases.remove(lease)
#Show lease
def __str__(self):
return(self.leases)
#Show leases
def show_leases(self):
for l in self.leases:
#print(vars(l))
#json.dump(l,str)
print(l.__str__())
我正在执行:
lease= Leases()
lease.add_lease_object(user1,book2)
#print(lease.__str__())
print(\"*************************\")
lease.show_leases()
print(\"*************************\")
lease.add_lease_object(user2,book3)
print(\"*************************\")
lease.show_leases()
print(\"*************************\")
lease.del_lease_object(user2,book3)
print(\"*************************\")
lease.show_leases()
这似乎工作正常,但它再次没有将嵌套对象的输出显示为字符串值:
{<main.Users object at 0x000001F9BD98E250>: <main.Books object at 0x000001F9BD8F2EB0>}
{<main.Users object at 0x000001F9BD98E250>: <main.Books object at 0x000001F9BD8F2EB0>} {<main.Users object at 0x000001F9BD98ED90>: <main.Books object at 0x000001F9BD98E1F0>}
{<main.Users object at 0x000001F9BD98E250>: <main.Books object at 0x000001F9BD8F2EB0>}
正如您在上面看到的,我什至尝试过:
#print(vars(l))
#json.dump(l,str)
但是当尝试访问不同类的嵌套对象时,结果类似。请问你有更好的主意吗?谢谢
-
好吧,将
print(self)更改为print(self.leases)。此外,您应该返回__str__中的字符串值而不是打印它。