python3 package management 包管理 實例


包是一種組織管理代碼的方式,包里面存放的是模塊

用於將模塊包含在一起的文件夾就是包

包內包含__init__.py標志性文件

 

定義一個學生類,一個sayhello函數,一個打印語句

# p01.py
class Student():

    def __init__(self, name="NoName", age=18):
        self.name = name
        self.age = age

    def say(self):
        print("My name is {}".format(self.name))


def sayhello():
    print("Hi,你好")


print("我是模塊p01")

 

一、定義一個Student類,因p01已定義好,所以直接調用

import p01

a = p01.Student("hh",19)

a.say()

p01.sayhello()
#此段代碼會先執行p01中的print,因為導入模塊,就相當於把p01整段代碼都導入進來,執行的時候會全部執行一遍

 

二、導入名字以數字開頭的包

#01.py,以數字開頭的模塊
class Student():

    def __init__(self, name="NoName", age=18):
        self.name = name
        self.age = age

    def say(self):
        print("My name is {}".format(self.name))


def sayhello():
    print("Hi,你好")


print("我是模塊p01")
# import 01
# 基於python變量的命名規則,不能以數字開頭
# 借助於importlib包可以實現導入以數字開頭的模塊名稱
import importlib

A = importlib.import_module("01")
a = A.Student()
a.say()

 

三、導入p01模塊,並重新命名為 p

import p01 as p

a = p.Student("hh",18)
a.say()

 

四、只想用Studen類,別的不想要

from p01 import Student
#有選擇性的導入
#使用時候不需要模塊名稱的前綴

a = Student("hh", 20)
a.say()

 

五、針對四導入Studen類,為何還會執行print

# p01.py,修改p01代碼
class Student():

    def __init__(self, name="NoName", age=18):
        self.name = name
        self.age = age

    def say(self):
        print("My name is {}".format(self.name))


def sayhello():
    print("Hi,你好")

# 可以有效避免代碼被導入的時候被動執行的問題
# 建議所有程序的入口都以此代碼為入口
if __name__ == "__main__":
    print("我是模塊p01")

 

六、導入包下的所有

# 導入p01模塊下的所有
from p01 import *
# 不需要前綴有個壞處,名稱太多容易引起混亂

sayhello()

a = Student("hh", 19)
a.say()

 

七、查看所有的包的路徑 及 添加路徑

import sys

print(type(sys.path))
# 獲取路徑列表
# 查看包的路徑,以方便使用時候的調用
print(sys.path)
for i in sys.path:
    print(i)

# 添加路徑
# sys.path.append(dir)

 

以下內容舉例描述不便,文字描述一下

 

包內模塊調用與模塊同級的包用法

語法:import package_name.module

   導入包中某一個具體的模塊

使用方法:

   package_name.module.func_name

   package_name.module.class.func()

   package_name.module.class.var

   跟上述用法都差不多

 

語法 :from package import module1,module2, ......

   此種導入方法不執行 '__init__'的內容

使用方法:

   from package import module

   module.dunc()

 

語法:from package import * 

   導入當前包 '__init__.py' 文件中的所有函數

使用方法:

   func_name()

   class_name.func_name()

   class_name.var

 

語法: from package.module import *

   導入包中指定模塊的所有內容

使用方法:

   func_name()

   class_name.func_name()

 

經常使用其他路徑下的包,可以在當前包中直接導入

import 完整包或者模塊的路徑

 

 '__all__'的用法,具體百度了解下

在使用from package import * 的時候, *可以導入的內容

'__init__.py' 中如果文件為空, 或者 沒有 '__all__',那么可以把 '__init__.py' 中的內容導入進去

'__init__.py' 如果設置了  '__all__' 的值 ,那么按照  '__all__' 指定的子包或者 模塊進行導入

如何則不會載入 '__init__.py' 中的全部內容

 '__all__' = ['module', 'module1', 'module2', ......]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM