按照在线教程,我输入了以下代码:
class Car:
# define and initialize some attributes of Car object
def __init__(self):
self.speed = 0
self.odometer = 0
self.time = 0
# 'get' function for current speed
def say_state(self):
print("I'm going {} kph!".format(self.speed))
# 'set' function for current speed
def accelerate(self):
self.speed += 5
# 'set' function for current speed
def brake(self):
self.speed -= 5
# 'set' function for trip time and distance
def step(self):
self.odometer += self.speed
self.time += 1
# 'get' function for average speed
def average_speed(self):
return self.odometer / self.time
if __name__ == "__main__":
my_car = Car()
print("I'm a car")
while True:
action = input("What should I do? [A]ccelerate, [B]rake, "
"show [O]dometer, or show average [S]peed").upper()
if action not in "ABOS" or len(action) != 1:
print("I don't know how to do that.")
continue
if action == "A":
my_car.accelerate()
elif action == "B":
my_car.brake()
elif action == "O":
print("My car has driven {} kilometers".format(my_car.odometer))
elif action == "S":
print("My car's average speed was {} kph".format(my_car.average_speed()))
my_car.step()
my_car.say_state()
然后,我中断了教程,因为它没有告诉我 if __name__ == "main" 业务是关于什么的。在其他地方阅读,我有点理解如果模块没有作为主类运行,而是被导入,这个语句会阻止 if 语句后面的代码执行。因此,为了对此进行测试,我输入了另一个小模块“import_practice.py:
import Car
corolla = Car()
corolla.say_state()
这段代码无法运行,出现错误“Car is not callable”,所以我认为我的导入是错误的。我用 from Car import Car 替换了 import Car 并且它起作用了,但是根据 following answer ,应该没什么区别吧?事实上,如果这个答案是正确的,那根本不是我想要从我的进口中摆脱出来的行为。
请您参考如下方法:
如果你这样做:
import Car
那么你的代码应该是:
corolla = Car.Car()
corolla.say_state()
当你“导入”一个模块时,你并没有将它的所有组件都带到当前的命名空间中。你只是在加载它。如果您想引用该模块上的组件,您必须通过其模块名称引用它:Car.Car。这里,第一个 Car 是模块的名称,第二个是类的名称。
如果你真的想将所有模块的组件导入当前命名空间,你可以执行from Car import *。但我不建议这样做。
之后,您执行了from Car import Car。在这里,这句话表明您正在将 Car 模块中的名称 Car 带到当前命名空间。因此,您可以在这之后对您的代码使用 Car。
请注意,您所指的答案并不是说 import Car 与 from Car import Car 相同。
