Skip to content
Advertisement

Unable to call function with self

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 method functiona().
  • 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'.
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement