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

2024-06-17 20:06:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两个模块:

主.py:

from statics import RiskyCars

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

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

静力学.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)

它只打印一次。你知道吗

为什么会这样?你知道吗


Tags: 模块函数namefrompyimportinitmain
1条回答
网友
1楼 · 发布于 2024-06-17 20:06:03

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

相关问题 更多 >