【问题标题】:having multiples clasess in a module in a package in Python?在 Python 的一个包中的一个模块中有多个类?
【发布时间】:2013-08-02 09:16:25
【问题描述】:

我无法理解 Python 中的包。特别是,在 Python 的一个包中的一个模块中是否可以有多个类。例如:

Kitchen/            Top-level package
    __init__.py     Initialize the package kitchen
    Fridge.py       module Fridge.py
        Food        This is a class in module Fridge
        Temperature This is another class in module Fridge
    Recipe.py
        BeefStake   This is a class in module Recipe.py

__init__.py中,代码为:

from Fridge import Food, Temperature
from Recipe import BeefStake
__all__ = ['Fridge', 'Recipe']

然后我会创建一个温度类的实例

from Kitchen import *
f = Food()
T = Temperature()

我试过了,只有 f = Food() 有效。另一个出现错误,类似于NameError: name 'Temperature' is not defined

如果有人知道是否有可能在 Python 的包中的一个模块中拥有 2 个这样的类。如果是这样,这种方法可能存在什么问题?

【问题讨论】:

  • 您提供给我们的代码并未说明您所询问的问题,因为f = Food() 没有 工作。请给我们您的真实代码,或者更好的是SSCCE,而不仅仅是与您的真实代码类似的代码。调试我们看不到的东西是不可能的,当有一百万件你可能做错的事情并且无法知道你做错了什么时。

标签: python class module directory package


【解决方案1】:

您向我们展示的代码对FoodTemperature 都不起作用。你明确地把它放在Kitchen

__all__ = ['Fridge', 'Recipe']

这意味着,即使您已将 FoodTemperature 导入到 Kitchen,您也不会重新导出它们。因此,f = Food() 将引发 NameError

如果您将其更改为,请说:

__all__ = ['Food', 'Temperature']

现在一切正常。

我的猜测是,在你的真实代码中,你犯了两个错误之一:

  • 忘记在__all__ 中包含Temperature,就像您在此处对FoodTemperature 所做的那样,或者
  • 在某处有错字,例如,t = temperature() 带有小写的 t

通常我怀疑第一个更有可能......但鉴于您的大小写不一致,并且拼写错误BeefSteak,我会在这里检查第二个。

【讨论】:

    【解决方案2】:

    是的,python 的一个模块中可以有多个类

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 2020-06-22
      • 2012-06-20
      • 2013-11-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2020-01-26
      • 2012-05-25
      相关资源
      最近更新 更多