Python 在构造函数中调用函数时获取NameError
通过调用构造函数中的函数,我运行了下面的代码 首先--Python 在构造函数中调用函数时获取NameError,python,constructor,Python,Constructor,通过调用构造函数中的函数,我运行了下面的代码 首先-- 我再一次运行这个,我得到了这个 >>> class PrintName: ... def __init__(self, value): ... self._value = value ... printName(self._value) ... def printName(self, value): ... for c in value: ... print c .
我再一次运行这个,我得到了这个
>>> class PrintName:
... def __init__(self, value):
... self._value = value
... printName(self._value)
... def printName(self, value):
... for c in value:
... print c
...
>>> o = PrintName('Hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
NameError: global name 'printName' is not defined
>>类打印名:
... 定义初始值(自身,值):
... 自我价值=价值
... 打印名(自身值)
... def打印名(自身,值):
... 对于c值:
... 打印c
...
>>>o=PrintName('Hello')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第4行,在_init中__
NameError:未定义全局名称“printName”
我不能在构造函数中调用函数吗?在执行类似的代码时有什么偏差
注意:我忘记使用self(例如:self.printName())调用类的本地函数。为这篇文章道歉。您需要调用
self.printName
,因为您的函数是属于printName类的方法
或者,因为printname函数不需要依赖对象状态,所以可以将其设置为模块级函数
class PrintName:
def __init__(self, value):
self._value = value
printName(self._value)
def printName(value):
for c in value:
print c
而不是
printName(self._value)
你想要
self.printName(self._value)
它可能是第一次起作用,因为您在父作用域中有另一个函数
printName
。您想要的是self.printName(self.u值)
在\uu init\uuuuuuuu
中,而不仅仅是printName(sel.u值)
我知道这是一个老问题,但我只想补充一点,您也可以使用类名和传递self作为第一个参数来调用函数
我不知道你为什么要这么做,因为我想这可能会让事情变得不那么清楚
class PrintName:
def __init__(self, value):
self._value = value
PrintName.printName(self, self._value)
def printName(self, value):
for c in value:
print(c)
有关更多信息,请参阅python手册第9章:
实际上,您可能已经猜到了答案:方法的特殊之处在于对象作为函数的第一个参数传递。在我们的示例中,调用x.f()与MyClass.f(x)完全等价。通常,使用n个参数的列表调用方法相当于使用参数列表调用相应的函数,该参数列表是通过在第一个参数之前插入方法的对象创建的
class PrintName:
def __init__(self, value):
self._value = value
PrintName.printName(self, self._value)
def printName(self, value):
for c in value:
print(c)