2
class BaseOne(object):

    def base_one(self):
        print self.first
        print self.second
        # Do stuffs with self.first and self.second defined from sub class


class BaseTwo(object):

    def base_two(self):
        print self.first
        print self.second
        # Do stuffs with self.first and self.second defined from sub class


class Stackoverflow(BaseOne, BaseTwo):

    def __init__(self):
        super(Stackoverflow, self).__init__()
        self.first = 'Stack'
        self.second = 'Overflow'


class Serverfault(BaseOne, BaseTwo):

    def __init__(self):
        super(Serverfault, self).__init__()
        self.first = 'Server'
        self.second = 'Fault'

Stackoverflow().base_one()
Serverfault().base_one()

またはのいずれBaseOneBaseTwoで、サブクラスから定義された変数を使用したいと思います。上記を行うためのより良い方法はありますか?

4

2 に答える 2

1

これをしない理由は見当たらない。first, second = None, Noneサブクラスがこれらの値を設定できなかった場合を考慮して、基本クラスに何かを追加する(またはこれら2つが継承するさらに高いレベルを作成する)ことをお勧めしますが、それ以外の場合は問題ありません。

于 2012-07-18T15:02:55.197 に答える
1

これは基本的に他の言語の抽象クラスと同じです。これをしない理由はありません。ここで水を濁している可能性がある場合を除いて、コードが理解できるようにしてください。

私はおそらく:

class BaseOne(object):
    def base_one(self):
        print self.first()
        print self.second()

    def first(self):
        return "bad boy, don't call this on abstract instance"

    def second(self):
        return 'really, son, you have a problem here. Go create some instances of subclasses!'
于 2012-07-18T15:06:29.470 に答える