5
#!/usr/bin/python

class Parent(object):        # define parent class
   parentAttr = 100
   def __init__(self):
      print "Calling parent constructor"

   def parentMethod(self):
      print 'Calling parent method'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "Parent attribute :", Parent.parentAttr


class Child(Parent): # define child class
   def __init__(self):
      print "Calling child constructor"

   def childMethod(self):
      print 'Calling child method'


c = Child()          # instance of child

ここで子クラスのインスタンスを作成して呼び出しました。親クラスのコンストラクターを呼び出していないようです。出力は次のようになります。

Calling child constructor

たとえばC++では、派生クラスのコンストラクターを呼び出すと、基本クラスのコンストラクターが最初に呼び出されます.Pythonでこれが起こらないのはなぜですか?

4

3 に答える 3

2

Python 3.x を使用している場合は、代わりにこれを実行できます (これは、独自のコードで行っていることとほとんど同じです)。

#! /usr/bin/env python3

def main():
    c = Child()
    c.method_a()
    c.method_b()
    c.get_attr()
    c.set_attr(200)
    Child().get_attr()

class Parent:

    static_attr = 100

    def __init__(self):
        print('Calling parent constructor')

    def method_a(self):
        print('Calling parent method')

    def set_attr(self, value):
        type(self).static_attr = value

    def get_attr(self):
        print('Parent attribute:', self.static_attr)

class Child(Parent):

    def __init__(self):
        print('Calling child constructor')
        super().__init__()

    def method_b(self):
        print('Calling child method')

if __name__ == '__main__':
    main()
于 2013-04-03T01:59:12.280 に答える