首页 > 解决方案 > 将类设置为变量时出现“名称未定义”

问题描述

抱歉这个愚蠢的问题,我似乎无法在任何地方找到答案。

我正在尝试将我的类转换为变量,但它给了我一个错误

NameError: name 'period' is not defined
class Stuff():
    
    def __init__(self, period = 1, division = 1): 
    
        print(str(period), str(division))
            
stuff = Stuff(period, division)

但是我不明白为什么它没有被定义,因为我特意将它定义为“1”以确保它。

如果我不定义参数,我会得到同样的错误

class Stuff():
    
    def __init__(self, period, division): 
    
        print(str(period), str(division))
            
stuff = Stuff()

我不想在调用参数之前定义参数,因为在此之前参数不会有值。我也不明白为什么需要定义它,因为函数启动参数不是字面的。

标签: pythonpython-3.xclassdefault-arguments

解决方案


一些东西。

首先,您没有将您的类“转换”为变量。您正在实例化类型并将该实例分配给一个变量,该变量包含对对象的引用。

转向手头的问题。正如评论所建议和扩展的那样,您从根本上误解了默认参数和实例化。

在您的第一个示例中,您拥有period和参数,它们都在构造函数( )division的范围内定义。__init__在构造函数中使用它们是有效的,因为它们存在于该范围内。

在此之下,您尝试通过传递调用且不存在Stuff的变量来实例化。它们不存在,因为您超出了构造函数的范围。perioddivision

你需要创建这些

class Stuff():
    
    def __init__(self, period = 1, division = 1): 
        print(str(period), str(division))


period = 1
division = 1

stuff = Stuff(period, division)

定义的变量与类的参数无关,只是Stuff在实例化这个对象时传入。

在您的第二个示例中,您已从正确的实例化中删除了这些不存在的变量,但您还删除了Stuff错误的类中参数的默认分配。这是错误的,因为现在您正在实例化一个其构造函数具有必需参数的对象,没有它它不知道如何处理这些参数。

该错误反映了这一强制性要求

TypeError: __init__() missing 2 required positional arguments: 'period' and 'division'

对于第二个示例,正确的语法是

class Stuff():
    
    def __init__(self, period = 1, division = 1):
        print(str(period), str(division))


stuff = Stuff()

推荐阅读