I’m writing a simple code snippet here, but unable to run the code
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')
It errors out with “AttributeError: ‘str’ object has no attribute ‘functiona'” Unable to call it with self. However, if I provide test.functiona(a) it works fine.
Few of other code samples works with self.function, how to solve this issue
Advertisement
Answer
test.functionb('abc')
is a function call on the class, not on an instance.
I suppose it works if you do test().functionb('abc')
?
The difference is:
- In your case, you call the function object on the class. As it is not a staticmethod or classmethod, it is called with
self = 'abc'
, a string. This string hasn’t a methodfunctiona()
. - In my case, the call operates on a class instance. Here,
self
is set to the instance you just created – and you get an error because it doesn’t know where to pass the'abc'
.