'name not defined' 将 class 设置为变量时

'name not defined' when setting a class to a variable

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

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

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

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

一些事情。

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

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

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

在此之下,您尝试通过传递名为 perioddivision 的变量来实例化 Stuff,其中 不存在 。它们不存在,因为你是 outside of the scope 的构造函数。

你需要创建这些

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


period = 1
division = 1

stuff = Stuff(period, division)

定义的变量与Stuffclass的参数无关,只是在实例化此对象时传入。

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

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

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