我正在使用 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)
它只打印一次。
为什么会这样?
最佳答案
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/