-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpubliclibrary.py
More file actions
195 lines (159 loc) · 5.05 KB
/
publiclibrary.py
File metadata and controls
195 lines (159 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/env python
from __future__ import print_function
from __future__ import unicode_literals
class Library(object):
def __init__(self, name):
'''Initialize library with a name, a list of shelves including
a special Unshelved shelf'''
self._name = name
self._shelves = []
self._unshelved = Shelf('Unshelved')
self.shelf_add(self._unshelved)
@property
def name(self):
'''Return library name.'''
return self._name
@name.setter
def name(self, value):
'''Set library name.'''
self._name = value
@property
def shelves(self):
'''Return library shelves.'''
return self._shelves
@property
def unshelved(self):
'''Return special Unshelved shelf.'''
return self._unshelved
def shelf_add(self, shelf):
'''Add shelf to library.'''
self._shelves.append(shelf)
shelf.library = self
def unshelved_pile(self, book):
'''Add book to special unshelved shelf.'''
self._unshelved._books.append(book)
book.shelf = self._unshelved
@property
def report(self):
'''Return names of books in library by shelf.'''
print('Library: ', self._name)
for x in self._shelves:
x.report
class Shelf(object):
def __init__(self, name):
'''Initialize a Shelf with a name and list of books.'''
self._name = name
self._library = None
self._books = []
@property
def name(self):
'''Return shelf name.'''
return self._name
@name.setter
def name(self, value):
'''Set shelf name'''
self._name = value
@property
def library(self):
'''Return library shelf is in.'''
return self._library
@library.setter
def library(self, value):
'''Set library shelf is in.'''
self._library = value
@property
def books(self):
'''Return books on shelf.'''
return self._books
def book_add(self, book):
'''Add book to shelf. Set shelf and library values for book itself'''
self._books.append(book)
book.shelf = self
book.library = self._library
def book_remove(self, book):
'''Remove book from shef.'''
self._books.remove(book)
@property
def report(self):
'''Return names of books on shelf.'''
print('Shelf: ', self._name)
for x in self._books:
print('\t', x.name)
class Book(object):
def __init__(self, name):
'''Initialize book with name.'''
self._name = name
self._shelf = None
self._library = None
@property
def name(self):
'''Return book name.'''
return self._name
@name.setter
def name(self, value):
'''Set book name'''
self._name = value
@property
def shelf(self):
'''Return shelf the book is on.'''
return self._shelf
@shelf.setter
def shelf(self, value):
'''Set which shelf book is on.'''
self._shelf = value
@property
def library(self):
'''Return name of library book is in.'''
return self._library
@library.setter
def library(self, value):
'''Set library book is in.'''
self._library = value
def enshelf(self, shelf):
'''Add book to shelf.'''
shelf.book_add(self)
def unshelf(self):
'''Remove book from shelf, set shelf as unshelved, add to unshelved pile in library.'''
self._shelf.book_remove(self)
self._library.unshelved_pile(self)
if __name__ == "__main__":
print('''First I create a library, 2 shleves, and 5 books.\n''')
'''Create library, shelves, and books'''
g = Library('Alexandria')
h = Shelf('Fun')
i = Shelf('Two')
j = Book('Hitchhikers Guide to the Galaxy')
k = Book('Dune')
l = Book('Game of Thrones')
m = Book('Every Grain of Rice')
n = Book('Kingdom Come')
print('''Then I add the shelves to the library.\n''')
'''Add the shelves to the library.'''
g.shelf_add(h)
g.shelf_add(i)
print('''Then I enshelf the books.\n''')
'''Enshelf the books.'''
j.enshelf(h)
k.enshelf(h)
l.enshelf(h)
m.enshelf(i)
n.enshelf(i)
print('''Now I show that the library methods except for unshelved_pile work properly.''')
print('Library name: {}'.format(g.name))
print('Library added shelves: {}, {}, {}.'.format(*[x.name for x in g.shelves]))
print('Library has one special shelf: {}.'.format(g.unshelved.name))
print('Here is a library report:\n')
g.report
print()
print('''Show that the shelf methods except book_remove work properly.''')
print('Shelf name: {}'.format(h.name))
print('Shelf added books: {}, {}, {}.'.format(*[x.name for x in h.books]))
print('Here is a shelf report.\n')
h.report
print()
print('''Now I unshelf a book''')
'''Unshelf a book'''
j.unshelf()
print('''Show that unshelved_pile and book_remove worked properly.''')
print('Here is a library report:\n')
g.report