title: Why do not C++ object methods expect a self argument unlike python?
body: <p>After a bit of experimentation I discovered something curious in Python (possibly obvious to experts, forgive me in that case). 
  That is, a python class method can be invoked with two different syntax as opposed to C++. I will give two minimum working examples with a simple class which just contains an integer attribute and can add another integer to it. First the C++. </p>
  
  <pre><code>#include &lt;iostream&gt;
  using namespace std;
  class MyClass
  {
      int value;
      public:
      MyClass(int arg){value=arg;}
      int add(int arg){return arg+value;}
  };
  
  int main()
  {
      MyClass anObject(4);
      cout&lt;&lt;"The addition gives "&lt;&lt;anObject.add(6)&lt;&lt;endl;//Outputs 10
  
      //cout&lt;&lt;"The alternative way to call the method gives "&lt;&lt;MyClass.add(anObject, 6)&lt;&lt;endl;  //Does not work
  
     //cout&lt;&lt;"Another alternative way to call the method gives "&lt;&lt;MyClass::add(anObject, 6)&lt;&lt;endl;  //Does not work either
  
     return EXIT_SUCCESS;
  }
  </code></pre>
  
  <p>and the python. </p>
  
  <pre><code>class MyClass(object):
      def __init__(self, arg=3):self.value=arg
      def add(self, arg):return arg+self.value
  anObject=MyClass(4)
  print(anObject.add(6)) #The C++ way, Outputs 10
  print(MyClass.add(anObject, 6))  #Outputs 10
  </code></pre>
  
  <p>Obviously, this is not a problem that I am trying to solve, but the objective of this question is to see a discussion around why option 2 is made a feature for python while it is not one in C++? Does it follow from some deeper design philosophy of the languages, or something to do with the compiled vs interpreted nature of the languages? Related, why is <code>self</code> presented as a dummy argument in python but not in C++? </p>