gpt4 book ai didi

python - 为什么 __name__ 等于 __main__?

转载 作者:行者123 更新时间:2023-12-05 02:52:43 24 4
gpt4 key购买 nike

我知道 __main____main__.py 的名称,在本例中是 test_employee。但我不明白的是 unittest 模块和我要测试的类正在被导入。那为什么__name__还是和__main__一样呢?据我了解,__name__ 代表正在导入的模块。

test_employee.py

import unittest

from employee import Employee

class TestEmployee(unittest.TestCase):

def setUp(self):
self.employee1 = Employee('June', 'July')
self.employee2 = Employee('Jane', 'Marshal')

def test_give_default_raise(self):
self.assertEqual(5000, self.employee1.annual_salary)

def test_give_custom_raise(self):
self.employee2.give_raise(1000)
self.assertEqual(6000, self.employee2.annual_salary)

if __name__ == '__main__':
unittest.main()

最佳答案

__main__ 是 python 的一个非常特殊的函数。它主要有两个兴趣:

  • if __name__ == '__main__' 条件
  • __main__.py 模块的文件(这不是目的层)

导入模块时,此模块的__name__ 属性设置为模块的名称(即没有.py 扩展名的文件名)。

>>> import my_module
>>> my_module.__name__
'my_module'

>>> import my_module.submodule
>>> my_module.submodule.__name__
'my_module.submodule'

但是,如果从主运行时环境(这是主要用例)调用属性,则变量将始终包含值 '__main__'。这样做的主要目的是测试是否从主运行时环境调用了主脚本。这有助于区分直接调用模块的情况(例如从命令行调用)和从另一个模块加载模块的情况(例如启动 argparse...)

不过,建议在 if __name__ == '__main__' 条件下放置尽可能少的代码以避免错误。

建议做如下操作:

# echo.py

import shlex
import sys

def echo(phrase: str) -> None:
"""A dummy wrapper around print."""
# for demonstration purposes, you can imagine that there is some
# valuable and reusable logic inside this function
print(phrase)

def main() -> int:
"""Echo the input arguments to standard output"""
phrase = shlex.join(sys.argv)
echo(phrase)
return 0

if __name__ == '__main__':
sys.exit(main())

关于python - 为什么 __name__ 等于 __main__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62507698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com