Python跨文件实例化、跨文件调用及导入库示例代码

作者:

文章目录
  • 原则 说明 示例 明确优于简洁 清楚表达导入来源 import requests 而非 from requests import * 一次性导入 在文件顶部集中导入 所有import语句放在文件开头 避免深层导入 减少包的嵌套层次 from myproject.utils import helper 使用__all__ 控制包的公开接口 __all__ = ["PublicClass", "public_function"] 文档化依赖 明确说明外部依赖 在模块顶部注释说明依赖的库
  • 到此这篇关于Python跨文件实例化、跨文件调用及导入库的文章就介绍到这了,更多相关Python跨文件实例化调用及导入库内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python实现跨文件全局变量的方法 python跨文件使用全局变量的实现 Python跨文件全局变量的使用技巧 python跨文件使用全局变量的实现 python导入库的具体方法
  • 目录
    • 1. 核心对比表格(完整汇总)
      • 1.1 自定义模块跨文件调用汇总表
      • 1.2 第三方库使用汇总表
      • 1.3 导入方式选择决策表
    • 2. 基础示例(快速上手)
      • 2.1 文件结构
      • 2.2 a.py(被导入文件)
      • 2.3 b.py(调用文件)
        • 2.3.1 方式一:选择性导入
        • 2.3.2 方式二:模块导入
    • 3. 第三方库使用示例
      • 3.1 HTTP 请求库
        • 3.2 日志库
        • 4. 常见问题快速解决
          • 4.1 循环导入
            • 4.2 命名冲突
              • 4.3 可选依赖
              • 5. 最佳实践总结
                • 6. 快速参考
                  • 6.1 导入语法速查
                    • 6.2 适用场景速查
                    • 总结 

                      code review!

                      对象类型 定义示例 导入方式 使用方式 完整代码示例 适用场景
                      class Calculator: from module_a import Calculator calc = Calculator() calc = Calculator("name") 需要创建多个实例
                      import module_a calc = module_a.Calculator() calc = module_a.Calculator("name") 避免命名冲突
                      函数 def calculate(a, b): from module_a import calculate result = calculate(1, 2) result = calculate(10, 20) 频繁调用
                      import module_a result = module_a.calculate(1, 2) result = module_a.calculate(10, 20) 明确来源
                      变量 x = 10 from module_a import x print(x) print(f"Value: {x}") 直接访问
                      import module_a print(module_a.x) print(f"Value: {module_a.x}") 保持命名空间
                      预实例化对象 calculator = Calculator() from module_a import calculator calculator.add(1, 2) result = calculator.add(5, 3) 共享全局实例
                      import module_a module_a.calculator.add(1, 2) result = module_a.calculator.add(5, 3) 明确对象来源
                      类方法 @classmethod def create(): from module_a import Calculator Calculator.create() obj = Calculator.create() 工厂方法
                      静态方法 @staticmethod def validate(): from module_a import Calculator Calculator.validate(5) valid = Calculator.validate(5) 工具方法
                      包中的类 package/module.py: class X from package.module import X x = X() x = X("param") 包结构项目
                      包的公开接口 __init__.py: from .module import X from package import X x = X() x = X("param") 包的便捷访问

                      库类型 导入方式 实例化/使用方式 跨文件共享模式 代码示例 常见用途
                      HTTP请求库 import requests session = requests.Session() 全局session global_session = requests.Session() API客户端
                      from requests import Session session = Session() 配置化session session = Session(); session.headers.update({}) 自定义配置
                      日志库 import logging logger = logging.getLogger(name) 命名日志器 app_logger = logging.getLogger("app") 应用日志
                      from logging import getLogger logger = getLogger(name) 快速访问 logger = getLogger(__name__) 模块日志
                      数据库库 import sqlite3 conn = sqlite3.connect(db) 连接池 conn = sqlite3.connect("app.db") 数据存储
                      配置库 import configparser config = ConfigParser() 全局配置 config = ConfigParser(); config.read() 配置管理
                      JSON库 import json json.loads() / json.dumps() 直接函数调用 data = json.loads(json_string) 数据序列化
                      时间库 import datetime datetime.now() 工具函数 now = datetime.datetime.now() 时间处理
                      数学库 import math math.sqrt() 直接函数调用 result = math.sqrt(16) 数学计算
                      from math import sqrt sqrt() 直接访问 result = sqrt(16) 频繁使用

                      场景 推荐导入方式 原因 示例
                      只使用1-2个对象 from module import obj1, obj2 简洁直接 from math import sqrt, pi
                      使用多个对象 import module 避免命名冲突 import numpy as np
                      对象名很长 from module import LongClassName as Short 提高可读性 from requests import Session as S
                      包的公开接口 from package import PublicClass 符合设计意图 from django.http import HttpResponse
                      避免命名冲突 import module1; import module2 保持命名空间 import os; import sys
                      条件导入 try: import optional_lib except: 可选依赖 try: import numpy except: numpy = None

                      a.py
                      b.py
                      

                      x = 10
                      
                      def bar():
                          print("bar")
                      
                      class Foo:
                          def hello(self):
                              print("hello")
                      
                      foo = Foo()
                      

                      from a import Foo, bar, x, foo
                      
                      f = Foo()
                      bar()
                      print(x)
                      foo.hello()
                      

                      import a
                      
                      f = a.Foo()
                      a.bar()
                      print(a.x)
                      a.foo.hello()
                      

                      # config.py
                      import requests
                      session = requests.Session()
                      
                      # main.py
                      from config import session
                      response = session.get("https://api.example.com")
                      

                      # logger.py
                      import logging
                      logger = logging.getLogger("app")
                      
                      # main.py
                      from logger import logger
                      logger.info("Application started")
                      

                      # 解决方案:函数内导入
                      def get_processor():
                          from file_b import DataProcessor  # 延迟导入
                          return DataProcessor()
                      

                      # 解决方案:使用别名
                      from module_a import Logger as LoggerA
                      from module_b import Logger as LoggerB
                      

                      # 解决方案:条件导入
                      try:
                          import pandas as pd
                          HAS_PANDAS = True
                      except ImportError:
                          HAS_PANDAS = False
                      
                      def process_data(data):
                          if HAS_PANDAS:
                              return pd.DataFrame(data)
                          else:
                              return data  # 降级处理
                      

                      原则 说明 示例
                      明确优于简洁 清楚表达导入来源 import requests 而非 from requests import *
                      一次性导入 在文件顶部集中导入 所有import语句放在文件开头
                      避免深层导入 减少包的嵌套层次 from myproject.utils import helper
                      使用__all__ 控制包的公开接口 __all__ = ["PublicClass", "public_function"]
                      文档化依赖 明确说明外部依赖 在模块顶部注释说明依赖的库

                      import module                    # 导入模块
                      from module import obj          # 导入对象
                      from module import obj as alias # 导入并重命名
                      from package.module import obj  # 包中模块导入
                      from . import module           # 相对导入(包内)
                      from ..parent import module    # 上级包导入
                      

                      • 小脚本from module import needed_items
                      • 大项目import module + 包结构
                      • 库开发:使用 __init__.py 控制公开接口
                      • 可选功能:条件导入 + 异常处理

                      到此这篇关于Python跨文件实例化、跨文件调用及导入库的文章就介绍到这了,更多相关Python跨文件实例化调用及导入库内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

                      您可能感兴趣的文章:

                      • python实现跨文件全局变量的方法
                      • python跨文件使用全局变量的实现
                      • Python跨文件全局变量的使用技巧
                      • python跨文件使用全局变量的实现
                      • python导入库的具体方法

                      站内搜索