类实例的生成导致未定义的变量

时间:2019-06-11 21:47:02

标签: python python-3.x

我在使用类生成模块实现随机统计信息生成模块时遇到问题。统计信息生成模块中的各个函数在单独测试时可以正常工作,但是当我尝试通过类实现它们时,始终弹出“变量未定义”错误。

我发誓这个问题是我完全没有想到的愚蠢之举,但是我已经做了很多改变,无济于事,我无处可寻。

我试图在类初始化和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]之类的统计值。

2 个答案:

答案 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())