首页 > 解决方案 > 类实例生成导致未定义的变量

问题描述

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

我发誓这个问题是我完全想念的愚蠢的东西,但是我改变了很多东西都无济于事,我无处可去。

我已经尝试更改类启动和 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生成应该在每个变量潜在值的范围内产生与每个变量相关的统计信息。例如,应该为它的 stat 值Car_1返回类似的东西。[7, 8, 5, 6, 8]

标签: pythonpython-3.x

解决方案


如果您从不同的文件导入代码,则它具有不同的命名空间。因此,您需要直接导入名称,如下所示:

from statgen import speed, durability, acceleration, handling, braking

或者您需要引用变量,包括它们的命名空间:

import statgen

print(statgen.speed())

ETC

命名空间允许您在不同的文件中使用相同的变量名,因为您可以使用命名空间来消除它们的歧义。这就是为什么 Python 之禅说它们是一个好主意 :)

因此,在您的情况下,您需要这样做,以确保:

if __name__ == "__main__":
    Car_1 = Car(statgen.speed(), statgen.acceleration(), statgen.handling(), statgen.braking(), statgen.durability())

推荐阅读