<p>When defining a method on a class in Python, it looks something like this:</p>

<pre><code>class MyClass(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
</code></pre>

<p>But in some other languages, such as C#, you have a reference to the object that the method is bound to with the "this" keyword without declaring it as an argument in the method prototype.  </p>

<p>Was this an intentional language design decision in Python or are there some implementation details that require the passing of "self" as an argument?</p>

It's to minimize the difference between methods and functions. It allows you to easily generate methods in metaclasses, or add methods at runtime to pre-existing classes.
e.g.
```
```
>>> class C:
...     def foo(self):
...         print("Hi!")
...
>>>
>>> def bar(self):
...     print("Bork bork bork!")
...
>>>
>>> c = C()
>>> C.bar = bar
>>> c.bar()
Bork bork bork!
>>> c.foo()
Hi!
>>>
```
```
It also (as far as I know) makes the implementation of the python runtime easier.