pr presentat ation schedule
play

Pr Presentat ation Schedule Monday May 4: 1:10: Breunig, - PDF document

4/24/20 CS 224 Introduction to Python Spring 2020 Class #33: Packages Pr Presentat ation Schedule Monday May 4: 1:10: Breunig, Hoffland, Lammer, Noel 1:30: Ahola, Krouth, Oswald, Persin 1:50: Boeck, Gruber, Thoman Wednesday May 6:


  1. 4/24/20 CS 224 Introduction to Python Spring 2020 Class #33: Packages Pr Presentat ation Schedule Monday May 4: 1:10: Breunig, Hoffland, Lammer, Noel 1:30: Ahola, Krouth, Oswald, Persin 1:50: Boeck, Gruber, Thoman Wednesday May 6: 1:10: Detaege, Fredrickson, LaFleur 1:30: Lynaugh, Perrin, Veldboom 1:50: Fitzpatrick, Witthun, Writz Friday May 8: 1:10: Watson, Xiong 1:30: Bedford, LaRue, Milos 1:50: Agarano, Hirt, Pierick 1

  2. 4/24/20 Con Consider r these mod modules Cars engine.py transmission.py Motorcycles electrical.py engine.py brakes.py transmission.py unibody.py electrical.py Trucks brakes.py frame.py engine.py transmission.py electrical.py We need to use all of these in brakes.py a single project but the names frame-body.py collide. Po Possible Solutions • Use import as to rename the modules at runtime • This is rather ad hoc • Rename the modules by changing filenames • Could cause problems with others using the modules • Find work in another industry • It won’t pay as well as CS unless you go into business but the thought of doing that makes your blood run cold • Manage the modules in a package • Please, Dr. Mathias, tell us more! 2

  3. 4/24/20 Wha What is s a pa package? • It’s just a collection of modules • (see slides from Class 30) • It can be hierarchical • i.e. contain subpackages • a subpackage is a package within another package • Can contain (limited) runnable code outside of the modules • It’s implemented as a directory on disk • package name is determined by directory name • (analogous to a module name being determined by .py filename) Le Let’s p pack ckage-iz ize ou our e r examp mple Vehicles/ Top-level directory and package name Cars/ engine.py transmission.py Subdirectories and subpackages electrical.py brakes.py unibody.py Trucks/ Motorcycles/ engine.py engine.py transmission.py transmission.py electrical.py electrical.py brakes.py brakes.py frame-body.py frame.py 3

  4. 4/24/20 Ca Can nest mor more deeply as needed Vehicles/ Subpackage of subpackage Cars Cars/ Drivetrain/ engine.py transmission.py electrical.py Similar to functional decomposition, brakes.py logical structure of your problem unibody.py will determine the hierarchy of your packages On One more detail A package can (should?) include an __init__.py file to execute initialization code: Vehicles/ __init__.py Cars/ More on this in a moment __init__.py Drivetrain/ __init__.py engine.py transmission.py electrical.py brakes.py unibody.py 4

  5. 4/24/20 Us Usin ing a a pac ackag age • To use the package, import some or all of its modules in another program import Vehicles.Cars.brakes Vehicles.Cars.brakes.absTest() Vehicles/ Cars/ from Vehicles.Cars import brakes Drivetrain/ brakes.absTest() Trucks/ Motorcycles/ from Vehicles.Cars.brakes import absTest absTest() Usin Us ing a a pac ackag age • When you import any part of a package, its __init__.py is executed Vehicles/ import Vehicles.Cars.brakes __init__.py Vehicles.Cars.brakes.abs_test() Cars/ __init__.py from Vehicles.Cars import brakes Drivetrain/ brakes.abs_test() __init__.py Trucks/ from Vehicles.Cars.brakes import abs_test __init__.py abs_test() Motorcycles/ All of these cause: Vehicles/__init__.py and __init__.py Vehicles/Cars/__init__.py to execute 5

  6. 4/24/20 Im Impo porting ting an an en entir tire e pac packag age import Vehicles Vehicles.Cars.brakes.abs_test() # ERROR This doesn’t import anything unless… __init__.py • Because __init__.py is run when we load a module, we can use it to control imports # Vehicles/__init__.py from . import Cars, Trucks, Motorcycles # Vehicles/Trucks/__init__.py from . import engine, transmission, electrical, brakes 6

  7. 4/24/20 __init__.py # Vehicles/__init__.py from . import Cars, Trucks, Motorcycles # Vehicles/Trucks/__init__.py from . import engine, transmission, electrical, brakes import Vehicles # now this call imports the modules # enumerated in the init files Wildcard import • Recall that in a module, we can define __all__ to control the elements that are imported using * • Similarly, we can define __all__ in a package to control the modules that are imported using * # Vehicles/Trucks/__init__.py __all__ = [engine, transmission, electrical, brakes] # code that uses the package from Vehicles.Trucks import * 7

  8. 4/24/20 Relative import • Some modules in a package may need to import elements from other modules in that package # Vehicles/Trucks/transmission.py from ..Vehicles.Cars import unibody .. indicates up one level 8

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend