If you do MyClass('a').my_method() like that in a loop, for instance, you'll give the garbage collector a lot of work to do.
Here's an example using the ipython conslole
In [11]: class Asdf(object):
....: def __init__(self, x):
....: self.x = x
....: def printx(self):
....: pass
....:
In [12]: def asdf(x):
....: pass
....:
In [13]: %timeit Asdf(9).printx()
The slowest run took 14.89 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 272 ns per loop
In [14]: %timeit asdf(9)
10000000 loops, best of 3: 56.9 ns per loop
As you can see, it takes a lot of time to instantiate and clean up the created objects, compared to just calling a function. Now in some cases just calling a function is not enough/ appropriate. But these are just my 2 cents concerning specifically the performance issue
Worth noting: I excluded the print from the function/method. If I left the print in, then the results look very different:
For the class instantiation, i got 100000 loops, best of 3: 7.42 µs per loop, and for the function call 100000 loops, best of 3: 7.4 µs per loop.
This is just to show that sometimes, little performance improvements bring ridiculously small improvements.