我在使用类生成模块实现随机统计信息生成模块时遇到问题。统计信息生成模块中的各个函数在单独测试时可以正常工作,但是当我尝试通过类实现它们时,始终弹出“变量未定义”错误。
我发誓这个问题是我完全没有想到的愚蠢之举,但是我已经做了很多改变,无济于事,我无处可寻。
我试图在类初始化和dunder主类初始化中更改变量。我也尝试过直接返回值,但仍然显示变量未定义。
当前对其进行调用会导致:
Car_1 = Car(speed(), acceleration(), handling(), braking(), durability())
NameError: name 'speed' is not defined
statgen.py
:
import random
def speed():
speed_base = random.randint(50, 100)
speed_tmp = float(speed_base/10)
if speed_tmp == 10:
return 10
else:
return int(speed_tmp)
def acceleration():
acc_base = random.randint(59, 100)
acc_tmp = float(acc_base/10)
if acc_tmp == 10:
return 10
else:
return int(acc_tmp)
def handling():
hnd_base = random.randint(30, 100)
hnd_tmp = float(hnd_base/10)
if hnd_tmp == 10:
return 10
else:
return int(hnd_tmp)
def braking():
brake_base = random.randint(55, 100)
brake_tmp = float(brake_base/10)
if brake_tmp == 10:
return 10
else:
return int(brake_tmp)
def durability():
dur_base = random.randint(35, 100)
dur_tmp = float(dur_base/10)
if dur_tmp == 10:
return 10
else:
return int(dur_tmp)
car.py
:
import statgen
class Car:
def __init__(self, speed, acceleration, handling, braking, durability):
self.speed = speed
self.acceleration = acceleration
self.handling = handling
self.braking = braking
self.durability = durability
if __name__ == "__main__":
Car_1 = Car(speed(), acceleration(), handling(), braking(), durability())
Car_1
的生成应产生与每个变量潜在值范围内的每个变量相关的统计信息。
例如,Car_1
应该返回[7, 8, 5, 6, 8]
之类的统计值。
答案 0 :(得分:1)
如果从其他文件导入代码,则该文件具有不同的名称空间。因此,您要么需要直接导入名称,要么像这样:
from statgen import speed, durability, acceleration, handling, braking
或者您需要引用变量,包括它们的名称空间:
import statgen
print(statgen.speed())
等
名称空间允许您在不同文件中使用相同的变量名称,因为您可以使用名称空间来消除它们的歧义。这就是为什么Python的Zen说他们是个好主意:)
因此,在您的情况下,您需要确保以下内容:
if __name__ == "__main__":
Car_1 = Car(statgen.speed(), statgen.acceleration(), statgen.handling(), statgen.braking(), statgen.durability())
答案 1 :(得分:0)
您从不调用函数,只是将函数分配给类属性。我认为应该是:
Car_1 = Car(speed(), acceleration(), handling(), braking(), durability())