I am working in a dynamic programming environment where I might need to define (or redefine) a class function. So consider this for example:

```
def func(self):
    print("hello2 \n")

class ManClass:
    def __init__(self):
        pass
    def func1(self):
        print("hello1\n")

a = ManClass()

a.func1()
hello1

a.func2 = func
>>> a.func2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 1 argument (0 given)

```

If func2() had been defined inside the class - a.func2() would have been interpreted as ManClass.func2(a) - but now that I am assigning it outside, it seems to expect an argument. How do I fix this, but more importantly, why this difference in how the two definitions are interpereted ?