python - 将类设置为变量时出现“名称未定义”
问题描述
抱歉这个愚蠢的问题,我似乎无法在任何地方找到答案。
我正在尝试将我的类转换为变量,但它给了我一个错误
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()
我不想在调用参数之前定义参数,因为在此之前参数不会有值。我也不明白为什么需要定义它,因为函数启动参数不是字面的。
解决方案
一些东西。
首先,您没有将您的类“转换”为变量。您正在实例化类型并将该实例分配给一个变量,该变量包含对对象的引用。
转向手头的问题。正如评论所建议和扩展的那样,您从根本上误解了默认参数和实例化。
在您的第一个示例中,您拥有period
和参数,它们都在构造函数( )division
的范围内定义。__init__
在构造函数中使用它们是有效的,因为它们存在于该范围内。
在此之下,您尝试通过传递调用且不存在Stuff
的变量来实例化。它们不存在,因为您超出了构造函数的范围。period
division
你需要创建这些
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()
推荐阅读
- r - 如果我只知道数据框的字符串变量名称,如何更改列的值?
- asp.net-core - 向使用“身份作为 UI”的 Web 应用程序验证 .NET Core 2.1 SignalR 控制台客户端
- javascript - preventDefault 在锚标记单击时停止刷新
- typescript - 打字稿错误 - 预期 1 个参数,但得到 0
- java - ANDROID STUDIO 中的文件夹视图
- javascript - ActiveAdmin 破坏了 Rails JQuery UJS。不显眼的 JavaScript ajax:success 和 ajax:error 没有触发或被调用
- node.js - 时刻无效日期 - 字符串到时刻 - hh:mm:ss zzz mm/dd/yyyy (02:10:02 SGT 06/07/2018)
- dns - DNS 查找得到不存在的域错误
- javascript - HTML 未正确处理
- excel - 将工作表中的所有行获取到另一个工作表中,其中每行包含一个与某个值匹配的单元格