我正在使用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)
仅打印一次。
为什么会发生?
答案 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