根据在线教程,我输入了以下代码:
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”_练习.py地址:
import Car
corolla = Car()
corolla.say_state()
此代码无法运行,错误为“Car is not callable”,因此我认为我的导入是错误的。我用from Car import Car
替换了import Car
,它工作了,但是根据following answer,它不会有什么区别,对吧?事实上,如果这个答案是正确的,那根本不是我想要从导入中摆脱出来的行为。你知道吗
如果您这样做:
那么你的代码应该是:
当您“导入”一个模块时,您并没有将其所有组件带到当前名称空间。你只是在装。如果要引用该模块上的组件,必须通过其模块名
Car.Car
引用它。这里,第一个Car
是模块的名称,第二个是类的名称。你知道吗如果您真的想将所有模块的组件导入到当前名称空间,您可以执行
from Car import *
。但我不建议这样做。你知道吗在那之后,你做了
from Car import Car
。在这里,这句话说明您正在将名称Car
从Car
模块带到当前名称空间。因此,在此之后,您可以在代码中使用Car
。你知道吗请注意,你所指的答案并不是说
import Car
与from Car import Car
相同。你知道吗进口问题
如果您有一个名为
Car.py
的文件,并调用import Car
,则会将整个模块添加到当前作用域中。你知道吗这意味着您还可以执行以下操作:
另一方面,如果您使用
from
关键字,您将在该模块中获得一些内容并将其添加到当前范围:这是什么废话?你知道吗
调用文件
python <my-file-name>
时,它将特殊变量__name__
设置为字符串__main__
。if __name__ == '__main__'
翻译为“如果有人试图将其作为独立脚本运行,那么请执行以下操作”。另一方面,如果有人在同一个文件上调用import
,则该区域将而不是触发。你知道吗线路
加载模块
Car
,并使其声明的所有内容(即类Car
)在命名空间Car
中可用。你知道吗线路
加载模块
Car
(from Car import
部分),然后使该模块中声明的名称Car
(即类Car
)在当前命名空间中可用。也就是说相当于
除了全局名称空间中的名称
Car
所指的以外(整个模块,或者只是一个类)。你知道吗注意,import语句还支持
as
。这样,您就可以更改当前命名空间中给定的名称:以及
也要和另外两个做同样的事情,除了名字。你知道吗
相关问题 更多 >
编程相关推荐