Why doesn't Python call instance method __init__() on instance creation but calls class-provided __init__() instead?

Special methods on new-style classes are looked up on the instance's type, not on the instance itself. This is documented behaviour:

For new-style classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary. That behaviour is the reason why the following code raises an exception (unlike the equivalent example with old-style classes):

>>> class C(object):
...     pass
...
>>> c = C()
>>> c.__len__ = lambda: 5
>>> len(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'C' has no len()

Various special methods (including __init__, but also operator overloads such as __add__, etc.) are always accessed via the class rather than the instance. Not only that, but they can't be accessed via a __getattr__ or __getattribute__ method on the class or metaclass, they have to be on the class directly. This is for reasons of efficiency:

Bypassing the __getattribute__() machinery in this fashion provides significant scope for speed optimisations within the interpreter, at the cost of some flexibility in the handling of special methods (the special method must be set on the class object itself in order to be consistently invoked by the interpreter).

It's not entirely clear what you're trying to accomplish, but one thing you could do here is to subclass myclass within the __new__ method:

class myclass(object):
    def __new__(cls, *args, **kwargs):
        class subcls(cls):
            def __new__(cls, *args, **kwargs):
                return object.__new__(cls)
        subcls.__init__ = myinit
        return subcls(*args, **kwargs)