【问题标题】:BaseClass inheritance from a separate file从一个单独的文件继承 BaseClass
【发布时间】:2014-06-21 11:36:26
【问题描述】:

我正在自动化由多个独立应用程序组成的环境。在某些时候,我决定将每个应用程序定义为一个类并将其保存为单独的文件是最有意义的。

我目前拥有的:

包含*py 文件的目录,其中每个文件为单个应用程序定义一个类。例如,我有应用程序App1。它保存在App1.py 文件中,看起来像这样:

class App1:
    def __init__(self):
        self.link = config.App1_link
        self.retry = config.App1_retry
    def access(self):
        pass
    def logOut(self):
        pass

所以每个类都定义了 App1 可以执行的所有操作,例如启动\登录到应用程序、执行操作、从应用程序注销等。

然后,在一个单独的文件中,我创建应用程序对象并一一调用对象的方法以创建多步骤场景。

我想要达到的目标

一切正常,但仍有改进的地方。许多类方法或多或少是相似的(例如像 login\logout to\from 应用程序这样的方法),并且显然可以在我可以继承的某种基类中定义。但是,由于我在单独的文件中定义了所有应用程序(目前这似乎是合乎逻辑的解决方案),我不知道在哪里定义这样的基类以及如何从它继承。我想到了 2 个选项,但我不确定哪一个(如果有的话)是正确的方法。

  1. 在单独的文件中定义一个基类,然后将其导入到每个应用程序类中。不确定这是否有意义。
  2. 创建一个包含所有应用程序类的非常长的文件,并将基类包含在同一文件中。 注意:因为每个应用程序都有自己的方法,并且其中一些本身是相当大的文件,所以这样的文件将非常庞大且难以维护。

那么这些是我唯一的选择吗?如果是,其中哪一个更有意义?

【问题讨论】:

  • 为什么选项 1 没有意义?这是一个不错的选择。
  • @MartijnPieters 感谢您的意见。我只是不确定这是否被认为是一个好方法。我的意思是从单独的文件中导入类。实际上我已经尝试过了,但可能犯了一些错误并且无法正常工作。但我想实际的实现是一个单独的问题。再次感谢。
  • 大多数 Python 标准库如果不这样工作就无法实现。 :-)
  • @MartijnPieters 所以我想它回答了我的问题 :) 如果你想把它作为答案发布,我很乐意接受。

标签: python class inheritance module code-organization


【解决方案1】:

这正是导入的目的。在单独的模块中定义您的基类,并将其导入到您需要的任何地方。选项 1 非常有意义。

注意Python的module naming convention是使用小写的名字;这样你就可以更容易地区分类和模块。我会将App1.py 重命名为app1.py

【讨论】:

  • 谢谢。我假设当您说模块时,您指的是实际文件?
  • 是的,文件名构成模块名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2014-12-10
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多