python - Print 函数从类中打印两次字段

标签 python python-2.7 pycharm

我正在使用 print 函数从另一个 python 模块的类中打印一个字段,它会打印该字段两次。

我有两个模块:

ma​​in.py:

from statics import RiskyCars

class Car:
    def __init__(self, name):
        self.name = name

# init
RiskyCars()
print(RiskyCars.risky_cars[0].name)

statics.py:

class RiskyCars:

    @staticmethod
    def __init__():
        from main import Car
        RiskyCars.risky_cars = []
        RiskyCars.risky_cars.append(Car("car1"))

当我运行 main.py 时,它会打印两次:

C:\Python27\python.exe C:/Users/myuser/PycharmProjects/Project1/main.py
car1
car1

但是如果我在 print 函数之前放置断点:

# main.py
# init
RiskyCars()     <--- break point

然后从终端手动运行:

print(RiskyCars.risky_cars[0].name)

它只打印一次。

为什么会这样?

最佳答案

Python 将您运行的主要脚本 main 重命名为 __main__。发生的事情是您运行 main(称为 __main__),它运行 RiskyCars.__init__,后者又导入 main(称为 main)。因此脚本 main 运行了两次。

解决方法是将main.py重写为

from statics import RiskyCars

if __name__ == '__main__':  # only execute if run as main script
    # init
    risky_car_1 = RiskyCars()  # lets at least pretend this is sensible
    print(RiskyCars.risky_cars[0].name)

statics.py

from cars import Car

class RiskyCars:
    risky_cars = []
    def __init__(self):
        RiskyCars.risky_cars.append(Car("car1"))

并创建一个名为 cars.py

的新文件
class Car:
    def __init__(self, name):
        self.name = name

关于python - Print 函数从类中打印两次字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51440271/

相关文章:

python - 两个带有字符串的列表的相似度分数

python - 使用 Django 的 AppEngine 应用程序加载失败

docker - 如何使用 pycharm 调试在 docker-compose 中运行的进程

python - SQLAlchemy 多对多无外键

python - 从 python 3 中的列表中删除

python - 如何检测 pytest 测试用例何时出现 AssertionError?

python - 无法成功启动boa-constructor

pycharm - 重构重命名,使其不在外部库中查找

pycharm - 我如何摆脱 "multiple rows of tabs"而只有一行,比如 firefox 或 eclipse?

python - 查找 python 列表的键值以与其他数组一起使用