打印功能从类中打印两次字段

时间:2018-07-20 10:14:39

标签: python python-2.7 pycharm

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

我有两个模块:

main.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)

仅打印一次。

为什么会发生?

1 个答案:

答案 0 :(得分:8)

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