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
是一个实例方法。您应该创建类的实例,并使用该实例调用该方法。