使用包将 Python 类拆分为多个模块

2023-11-29

我在 python 中编写了一些代码作为一个类,但现在我正在尝试将其作为包分发,但我在弄清楚不同的部分应该如何组合在一起时遇到了一些麻烦。

因此,当我最初编写代码时,我有一个包含一些函数的类,其中包括__init__功能。我现在已将每个函数拆分为自己的文件,并以函数名称命名,但我不确定将函数放在哪里init函数,因为它需要参数。下面是一个例子。

原始格式:

class className(object):

    def __init__(self, arg1, arg2):
         self.arg1 = arg1
         self.arg2 = arg2

    def func1(self):

    def func2(self, arg3):

用法为:

import name

a = name.className(arg1, arg2)
a.func1()
a.func2(arg3)

现在文件树是:

Name/
    /className
        __init__.py
        func1.py
        func2.py

并继续包括其他功能。我想保持与原来相同的基本使用模式。

现在,我的问题是__init__函数应该去吗?在 - 的里面__init__.py文件?别的地方?另一个问题是我想将一些导入放入__init__.py文件;我知道他们应该进去__init__.py文件,但我不知道它们与__init__功能。任何帮助表示赞赏。


您不能将一个类拆分到多个文件中。一个包应该包含多个模块,这些模块是包含代码(完整的类、函数等)的文件。

The __init__.py文件在导入包时运行(尽管很少用于实际执行大量代码)并告诉Python该目录是一个包,它不是类的构造函数。

包(文件夹)应该是包和模块的集合,而模块(文件)将是代码的集合。

正常层次结构的示例:

- somepackage (Folder)
    - __init__.py (File)
    - somemodule.py (File)
        - SomeClass (Code)
        - some_function (Code)

最后一点,我说你不能将一个类拆分到多个文件中 - 从技术上讲,你可以通过猴子修补函数到类中或其他一些类似的怪事来做到这一点,但你永远不会想要这样做,因为它会掩盖你的代码很多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用包将 Python 类拆分为多个模块 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 容器 div 水平溢出但垂直不溢出

    我正在开发一个在容器内使用两列的网站 该容器有一个白色背景 应该延伸到最高的列的底部 所以我使用圣杯方法 但是 两列的位置都应使其一部分超出白色背景 这个例子使用固定高度 该高度应该是流动的 据我所知 这只能通过将溢出设置为可见来完成 但这
  • 检测 HTML5 Canvas 上的线条描述的区域

    从 HTML5 画布上的二维网格开始 用户通过绘制点来创建线 最多 5 条线 接下来 用户可以选择网格上的另一个任意点 并且该区域会突出显示 我需要获取该点并定义一个多边形来填充用户创建的线条所描述的区域 所以我的想法是 我需要检测围绕任意
  • php: echo ('x' == 0) 打印 1(真)。它是否正确?

    我和我的朋友在调试应用程序时发现了这个 此代码打印 1 因此 x 等于 0 这是正确的 有人可以解释为什么会这样吗 我想可能是我不明白 php 规则中的某些内容 或者可能是一个错误 谢谢 使用 类型杂耍 将字符串转换为数字 这显示在文档 t
  • Jupyter笔记本,将单元从一个笔记本移动到一个新笔记本中

    是否可以将 n 个单元从一台笔记本移动到另一台新笔记本 以编程方式将 n 个单元从一台笔记本移动到新笔记本 是的 您可以使用nbformat取出一个笔记本 并将新笔记本的内容限制为原始笔记本的 n 个单元格的块 nbformat 包允许您以
  • 调用 C# COM 对象

    好的 我创建了一个 c dll 将其所有接口和方法全部设为 ComVisible true 使用 gacutil 将其添加到 GAC 然后使用 regasm 注册它并创建类型库 tlb 文件 现在我有另一个 c 项目 我想调用该 com 对
  • 如何从 Power Query 中的上一行获取列值?

    我想从前一行获取一个值 我按照中的建议尝试了以下代码这个帖子 Table AddColumn Added index custom column each Index 1 column name 但它会抛出这个错误 Cannot use f
  • Python:使用 webbrowser-control 更改网络浏览器的 url

    好的 我知道如果你想使用 python 打开特定的 url 你可以运行 import webbrowser webbrowser open buinvent com 但是 如果您想在 Web 浏览器中将其更改为不同的 url 而不在 Web
  • 在我的班级中实现 Thread Android?

    我想知道如何在此类中实现线程以使其免受ANR 应用程序无响应 问题的影响 public class myClass private static String LOG TAG Root class getName public boolea
  • 奇怪的 JavaScript 习惯用法 - “/xyz/.test(function(){xyz;})” 是做什么的?

    John Resig 写了一个漂亮的类函数 时髦 我试图弄清楚发生了什么事 并且几乎所有事情都弄清楚了 除了一行 fnTest xyz test function xyz b super b 有几件事立即跳入我的脑海 首先xyz从未被初始化
  • 转换后的图像不清楚。 .wmf 转 png

    我正在尝试使用 c net 将 wmf 图像文件转换为 png 格式 但是 保存的图像不清楚 my code Metafile img new Metafile test wmf MetafileHeader header img GetM
  • VueJS从父组件访问子组件的数据

    我正在使用webpack 的 vue cli 脚手架 我的 Vue 组件结构 层次结构当前如下所示 App PDF Template 背景 动态模板图像 静态模板图像 Markdown 在应用程序级别 我想要一个 vuejs 组件方法 可以
  • 在Python中按(n个)块迭代迭代器?

    你能想出一种好方法 也许使用 itertools 将迭代器分割成给定大小的块吗 所以l 1 2 3 4 5 6 7 with chunks l 3 成为迭代器 1 2 3 4 5 6 7 我可以想到一个小程序来做到这一点 但也许不是 ite
  • Lein Clojure 1.3 与 Clojure 1.2.1

    我承认这个问题的措辞有点糟糕 请让我知道我应该运行哪些命令来提供更多信息 我会提供它 背景 我使用 Clojure 已有约 1 年了 主要只是通过clojure repl 现在 我开始使用 Lein 然而 leon 不喜欢我的一些代码 这是
  • 如何使用php检索特定文件夹中的所有文件名

    比如说 在我的网络服务器中有一个名为 upload files 的文件夹 然后我的 php 页面之一应该获取该文件夹中的所有文件名 我已经用谷歌搜索过 但到目前为止返回的文件名只是用户浏览的页面 谢谢 有很多方法可以检索文件夹内容 例如gl
  • CodeIgniter - 使用一个输入上传多个文件

    我正在尝试上传几个文件立即从1个输入
  • 如何创建一个无论字符序列如何都匹配的正则表达式?

    假设我要求用户输入所提供的某些单词 他 只会将其输入到将被验证的文本框中不管我已经寻找答案几个小时了 但我被困住了 例如应输入的单词是 foo bar green 即使订单是 我仍然可以匹配它绿富酒吧 or 绿色Foo酒吧 我非常了解正则表
  • 如何在 EF Core 2.1.0 中设置管理员用户?

    我有一个使用 EF Core 2 1 0 的 ASP NET Core 2 1 0 应用程序 如何使用管理员用户播种数据库并赋予他 她管理员角色 我找不到任何关于此的文档 As user cannot be seeded in a norm
  • Android - ListView:复选框未保持选中状态

    我有一个列表视图 大约有 200 个项目 我为复选框实现了一个自定义 ArrayAdapter 我使用 SparseBooleanArray 来存储框的值 所有这些工作正常 但我似乎无法以图形方式更新复选框的检查 如果用户单击 则该框被选中
  • 链接两个 D3 图

    我正在尝试链接两个 D3 图 以便选择右侧直方图的一部分 导致某个散点图显示在左侧 This是我的尝试 我当前的问题是为什么正确的图没有渲染 我认为这可以追溯到如何在 d3 中创建和引用多个 SVG 标签 D3 有针对这种情况的 SVG 控
  • 使用包将 Python 类拆分为多个模块

    我在 python 中编写了一些代码作为一个类 但现在我正在尝试将其作为包分发 但我在弄清楚不同的部分应该如何组合在一起时遇到了一些麻烦 因此 当我最初编写代码时 我有一个包含一些函数的类 其中包括 init 功能 我现在已将每个函数拆分为