-2
 # -*- coding: utf-8 -*-

    class partner(object):
       _table = 'partner'

       def sendsms(self):
          print "I am partners"

       def sendemail(self):
          print "send email"


    class student(partner):

      _inherit = 'partner'    
      _table = 'student'

      def sendsms(self):
        print "I am student"
        print "@@", self._inherit
        print "###", self._table
        super(student,self).sendsms()

    class student(student):

      _inherit = 'student'

      def fees(self):
        print "1000 INR"

   t = student()
   t.sendsms()

これは再帰的に行われますが、問題または継承の問題は何ですか?

4

2 に答える 2

1
super(student,self).sendsms()

グローバル名student(呼び出し時に2番目の名前)を取り、その親(1番目の名前)を取り、そのを呼び出します.sendsms()。再帰を無効にします。

解決策は、名がシャドウされないように2番目のクラスの名前を変更することです。

于 2013-01-09T07:46:53.737 に答える
1

class student(student):意味をなさないコード行です。あなたが何かをするなら

# -*- coding: utf-8 -*-

class partner(object):
    _table = 'partner'

    def sendsms(self):
        print "I am partners"

    def sendemail(self):
        print "send email"


class student(partner):

    _inherit = 'partner'    
    _table = 'student'

    def sendsms(self):
        print "I am student"
        print "@@", self._inherit
        print "###", self._table
        super(student,self).sendsms()

class student2(student):

    _inherit = 'student'

    def fees(self):
        print "1000 INR"

t = student2()
t.sendsms()

代わりに動作しますが、これはおそらくやりたいことではありません。これ以上の説明がなければ、私たちは本当にあなたを助けることができません.

ところで、上記のコードは次のようになります。

I am student
@@ partner
### student
I am partners
于 2013-01-09T07:46:25.750 に答える