Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 无法使用self调用函数_Python_Python 3.x - Fatal编程技术网

Python 无法使用self调用函数

Python 无法使用self调用函数,python,python-3.x,Python,Python 3.x,我正在这里编写一个简单的代码片段,但无法运行代码 class test: def __init__(self): pass def functiona(self, a): b = a+0 print(b) def functionb(self): a = 5 self.functiona(a) test.functionb('abc') 它错误为“AttributeError:'str

我正在这里编写一个简单的代码片段,但无法运行代码

class test:
    def __init__(self):
        pass

    def functiona(self, a):
        b = a+0
        print(b)

    def functionb(self):
        a = 5
        self.functiona(a)

test.functionb('abc')
它错误为“AttributeError:'str'对象没有属性'function'”,无法用self调用它。但是,如果我提供test.function(a),它可以正常工作


很少有其他代码示例使用self.function,如何解决此问题

您可以添加decorator
@classmethod
,然后像以前那样调用它

类测试:
定义初始化(自):
通过
@类方法
def功能(自我,a):
b=a+0
印刷品(b)
@类方法
def功能B(自身):
a=5
自我功能(a)
测试功能(1001) >>> 1001 >>>test.functionb() >>> 5
问题在于调用test.functionb('abc')。您没有使用类的对象来调用该方法。因此,
self
参数未被传递。 Python认为,第一个参数是self,您传递的是字符串
'abc'

test().functionb('abc')
,那么默认的第一个参数就成为
test
的对象,就像
functionb(test_ob,'abc')
测试一样。functionb('abc')
是对类的函数调用,而不是对实例的函数调用

如果您执行
test(),我想它会起作用。functionb('abc')
`

区别在于:

  • 在您的例子中,调用类上的函数对象。由于它不是staticmethod或classmethod,因此使用字符串
    self='abc'
    调用它。此字符串没有方法
    function()
  • 在我的例子中,调用在类实例上运行。在这里,
    self
    被设置为您刚刚创建的实例,您会得到一个错误,因为它不知道在哪里传递
    'abc'

  • 问题在于调用测试。functionb('abc')。您没有使用类的对象来调用该方法。因此,不会传递self参数。Python认为,第一个参数是self,您传递了“abc”,它是一个字符串


    像test()一样使用它。functionb('abc'),那么默认的第一个参数将成为test-like functionb(test_ob,'abc')的对象。

    functionb
    是一个实例方法。您应该创建类的实例,并使用该实例调用该方法。