Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在构造函数中调用函数时获取NameError_Python_Constructor - Fatal编程技术网

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)