【问题标题】:Python Class Import ErrorPython 类导入错误
【发布时间】:2013-05-18 23:35:59
【问题描述】:

我正在研究 python 中的类和 OO,当我尝试从包中导入类时发现了一个问题。项目结构和类描述如下:

ex1/
    __init__.py
    app/
        __init__.py
        App1.py
    pojo/
        __init__.py
        Fone.py

类:

Fone.py

class Fone(object):

    def __init__(self,volume):
        self.change_volume(volume)

    def get_volume(self):
        return self.__volume

    def change_volume(self,volume):
        if volume >100:
            self.__volume = 100
        elif volume <0:
            self.__volume = 0
        else:
            self.__volume = volume

volume = property(get_volume,change_volume)

App1.py

from ex1.pojo import Fone

if __name__ == '__main__':
    fone = Fone(70)
    print fone.volume

    fone.change_volume(110)
    print fone.get_volume()

    fone.change_volume(-12)
    print fone.get_volume()

    fone.volume = -90
    print fone.volume

    fone.change_volume(fone.get_volume() **2)
    print fone.get_volume()

当我尝试使用 from ex1.pojo import Fone 时,会出现以下错误:

fone = Fone(70)
TypeError: 'module' object is not callable

但是当我使用 from ex1.pojo.Fone import * 时,程序运行良好。

为什么我不能用我编码的方式导入 Fone 类?

【问题讨论】:

    标签: python class import


    【解决方案1】:
    from ex1.pojo.Fone import Fone
    

    【讨论】:

      【解决方案2】:

      在 python 中,您可以导入模块或该模块的成员

      当你这样做时:

      from ex1.pojo import Fone

      您正在导入您的模块Fone,以便您可以使用

      fone = Fone.Fone(6)

      或该模块的任何其他成员。

      但你也可以只导入该模块的某些成员,例如

      from ex1.pojo.Fone import Fone

      我认为值得回顾一些关于 python 模块、包和导入的 documentation

      【讨论】:

      • 嗯,奇怪。我认为模块的导入在语法上等于类的导入。这让我很困惑,因为我习惯用 Java 构建类,但是 Python 将 .py 文件视为模块。因此,模块名称已大写
      • @AndréCaldas 在 python 中是的,您的模块可以包含多个类、多个函数或混合
      【解决方案3】:

      你应该导入类,而不是模块。示例:

      from ex1.pojo.Fone import Fone
      

      您还应该为您的模块名称使用小写命名约定。

      【讨论】:

      • 我习惯用Java构造类,所以我认为模块的名称应该大写,比如Java。但我很喜欢你关于会议的建议!
      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多