Q:

From where comes the parent argument (PySide)?

In this example, from where comes the parent argument, who provides it?
class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.do_something() #sanity check
        self.cw = ChildWidget(self)
        self.setCentralWidget(self.cw)
        self.show()

    def do_something(self):
        print 'doing something!'

class ChildWidget(QtGui.QWidget):
    def __init__(self, parent):
        super(ChildWidget, self).__init__(parent)

        self.button1 = QtGui.QPushButton()
        self.button1.clicked.connect(self.do_something_else)

        self.button2 = QtGui.QPushButton()
        self.button2.clicked.connect(self.parent().do_something)

        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self.button1)
        self.layout.addWidget(self.button2)
        self.setLayout(self.layout)
        self.show()

    def do_something_else(self):
        print 'doing something else!'

A:

Parent and children are specific to Qt (C++). From the doc of QObject:

QObjects organize themselves in object trees. When you create a
  QObject with another object as parent, the object will automatically
  add itself to the parent's children() list. The parent takes ownership
  of the object; i.e., it will automatically delete its children in its
  destructor.

QWidget and a lot of other class inherits fromQObject, so it apply to them too. For every children, the parent() method returns a pointer to the parent object. 
Basically, your creates widget with parents so they can be deleted properly.
Common case, your main window is the parent - or grandparent - of all your widgets: when you close the window, everything is deleted in the right order. 

From your comment, I think your also confused with the use ofsuper(). It does not call the parent of the widget.  
Another way to write this:
class ChildWidget(QtGui.QWidget):
    def __init__(self, parent):
        super(ChildWidget, self).__init__(parent)

is to call the init method of QWidget directly:
class ChildWidget(QtGui.QWidget):
    def __init__(self, parent):
        QtGui.QWidget.__init__(parent)

ChildWidget inherits from QWidget (that's how we defined the class). In the init method, you need to call the default constructor of QWidget. Otherwise you won't be able to use the default methods and attributes of QWidget (try and see...).
If given a parent, it will also organize itself accordingly. It will add itself to the parent children method, and keep a reference to its parent.

