On 12/5/2009 9:27 PM, Michael wrote:
It seems like it can return either a class or an instance of a class.
Like
super( C, self)
is like casting self as superclass C.
However if you omit the second argument entirely you get a class.

Inside a class C: these are all equivalent:
super().method(arg) # python 3
super(C, self).method(arg)
super(C).method(self, arg)

it is similar to how you can call
class C(object):
    def method(self, arg):
        pass

inst = C()
# these are equivalent
inst.method(arg)
C.method(inst, arg)


python 2.x restricts the first argument of an unbound method to instance of the class; python 3.x does not have such restriction. Thus, it is possible in python 3.x to have:
>>> class A(object):
...     pass
...
>>> class B(object):
...     def anom(self):
...         print(self)
...
>>> a = A()
>>> B.anom(a)
<__main__.A object at 0x0165C630>

the same thing in python 2 would be an error.

The former is considered a "bound" object. I'm really not clear on the
idea of "binding" in Python.

The first argument of a bound method (the argument self) is automatically redirected to the instance. Notice when you called a method:
class A(object):
    # this declaration have 3 arguments
    def foo(self, a, b):
        pass

a = A()
# called by only 2 arguments
a.foo(1, 2)

because a.foo binds method A.foo() and `a`; and `a` is passed implicitly as the first argument to A.foo(a, 1, 2).
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to