在Python包的一个模块中有多个类?

2024-04-26 08:12:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法理解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']

然后我将创建一个Temperature类的实例

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

我试过这个,但只让f = Food()起作用。另一个出现了一个错误,比如NameError: name 'Temperature' is not defined

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


Tags: 模块infrompyimportpackagefoodis
2条回答

你给我们看的代码既不能用于也不能用于FoodTemperature。您可以显式地将其放入Kitchen

__all__ = ['Fridge', 'Recipe']

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

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

__all__ = ['Food', 'Temperature']

现在一切正常。你知道吗

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

  • 忘了在__all__中包含Temperature,就像您在这里同时使用FoodTemperature一样,或者
  • 在某处有一个拼写错误,例如t = temperature()和小写t。你知道吗

通常我会怀疑第一个更可能…但是考虑到你不符合大写,并且拼写错误BeefSteak,我会在这里检查第二个。你知道吗

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

相关问题 更多 >