python-mastery/Exercises/ex9_2.md
2023-07-16 20:21:00 -05:00

68 lines
2.1 KiB
Markdown

\[ [Index](index.md) | [Exercise 9.1](ex9_1.md) | [Exercise 9.3](ex9_3.md) \]
# Exercise 9.2
*Objectives:*
- Learn how to create a Python package
**Note**
This exercise mostly just involves copying files on the file system.
There shouldn't be a lot of coding.
## (a) Making a Package
In previous exercises, you created the following files that were related to
type-checked structures, reading data, and making tables:
- `structure.py`
- `validate.py`
- `reader.py`
- `tableformat.py`
Your task is to take all of these files and move them into a package called `structly`.
To do that, follow these steps:
- Make a directory called `structly`
- Make an empty file `__init__.py` and put it in the `structly` directory
- Move the files `structure.py`, `validate.py`, `reader.py`, and `tableformat.py` into the `structly` directory.
- Fix any import statements between modules (specifically, the `structure` module depends on `validate`).
Once you've done that, modify the `stock.py` program so that it looks exactly like this
and that it works:
```python
# stock.py
from structly.structure import Structure
class Stock(Structure):
name = String()
shares = PositiveInteger()
price = PositiveFloat()
@property
def cost(self):
return self.shares * self.price
def sell(self, nshares: PositiveInteger):
self.shares -= nshares
if __name__ == '__main__':
from structly.reader import read_csv_as_instances
from structly.tableformat import create_formatter, print_table
portfolio = read_csv_as_instances('Data/portfolio.csv', Stock)
formatter = create_formatter('text')
print_table(portfolio, ['name','shares','price'], formatter)
```
\[ [Solution](soln9_2.md) | [Index](index.md) | [Exercise 9.1](ex9_1.md) | [Exercise 9.3](ex9_3.md) \]
----
`>>>` Advanced Python Mastery
`...` A course by [dabeaz](https://www.dabeaz.com)
`...` Copyright 2007-2023
![](https://i.creativecommons.org/l/by-sa/4.0/88x31.png). This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)