首页 > 解决方案 > 在 Python 中导入的困惑

问题描述

作为一个初学者,我在掌握 Python 中的导入时遇到了一些麻烦。

假设有一个名为 testmodule.py 的模块,例如这个,它包含一个类、方法和另一个函数:

class student:
    def __init__ (self, n, a, s):
        self.name = n
        self.age = a
        self.score = s

    def ratio (self):
        return self.age / self.score


def multiply (x):
    return x * 10

现在我将它导入到我的新脚本中:

from testmodule import student
from testmodule import multiply

S1 = student("joe",33,98) #instance of the student Class defined in testmodule

S1.ratio() #method defined in the student Class defined in testmodule

multiply(10) #another function defined in testmodule, outside of the student Class

我有点迷失的地方是当我阅读其他人的代码时,我经常很难确定某些项目何时以及为什么作为函数、方法和类运行。
在我看来,根据我所包含的示例,尽管使用了与 from X import Y 相同的语法,但此时导入的内容是类还是函数并没有明显的区别。

感谢您提供任何建议来帮助我解决这个问题。

标签: pythonfunctionclassmethodsimport

解决方案


我经常难以确定某些项目何时以及为什么作为函数、方法和类运行。

术语:您所说的“项目”似乎是namesidentifiers。他们不是“跑”的;它们引用命名函数、方法、类等。

从根本上说,当您导入您自己的代码时,导入student引用一个类的原因是它是在您导入的模块中定义的。其他人的代码也是如此:事物就是它们被定义的样子。

但我假设您实际上要问的问题是,您如何知道名称是指函数、类还是其他东西。有多种可能性:

  1. 您可以阅读文档- 这就是它的用途。

  2. 您可以检查代码(如果可用)。

  3. 您可以依赖约定:我们更喜欢命名类LikeThis和函数like_this。(你会知道什么时候是一个方法,因为你要么必须将它作为类的属性来访问:要么作为该类Student.ratio的实例来访问:s1.ratio。)

在这一点上没有明显的区别

的确。这是故意的(我也想不出在类似情况下强制区分的任何其他语言)。在 Python 中,我们有事物(objects)和这些事物的名称(也许您已经看到名为 的异常NameError?它的意思正是它所说的);一切都是对象——包括类本身、函数、方法和模块


推荐阅读