python - 在 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 相同的语法,但此时导入的内容是类还是函数并没有明显的区别。
感谢您提供任何建议来帮助我解决这个问题。
解决方案
我经常难以确定某些项目何时以及为什么作为函数、方法和类运行。
术语:您所说的“项目”似乎是names或identifiers。他们不是“跑”的;它们引用或命名函数、方法、类等。
从根本上说,当您导入您自己的代码时,导入student
引用一个类的原因是它是在您导入的模块中定义的。其他人的代码也是如此:事物就是它们被定义的样子。
但我假设您实际上要问的问题是,您如何知道名称是指函数、类还是其他东西。有多种可能性:
您可以阅读文档- 这就是它的用途。
您可以检查代码(如果可用)。
您可以依赖约定:我们更喜欢命名类
LikeThis
和函数like_this
。(你会知道什么时候是一个方法,因为你要么必须将它作为类的属性来访问:要么作为该类Student.ratio
的实例来访问:s1.ratio
。)
在这一点上没有明显的区别
的确。这是故意的(我也想不出在类似情况下强制区分的任何其他语言)。在 Python 中,我们有事物(objects)和这些事物的名称(也许您已经看到名为 的异常NameError
?它的意思正是它所说的);一切都是对象——包括类本身、函数、方法和模块。
推荐阅读
- swift - 有没有办法在 Swift 中的多次执行中生成相同的哈希?
- reactjs - 无法在 React 应用程序中测试轻量级图表
- google-apps-script - 用于复制并列出文件夹中所有电子表格的最后一行的 Google 脚本
- php - Laravel 关联关系
- regex - PowerShell - 使用命名捕获组的正则表达式需要帮助
- apache-nifi - 如何在 java 自定义处理器和单元测试中使用上下文参数
- javascript - Javascript for 循环在其最后一个循环中没有执行预期的行为
- javascript - 当机器人重新启动时,我将如何制作 Discord 反应角色 STAY ALIVE?
- python - 由于我传递给 cross_val_score 的自定义记分器而获得“缺少 2 个必需的位置参数”
- r - 计算几个列案例的出现次数