2012-07-18 32 views
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,我想使用從子類定義的變量。有沒有更好的方法來做到上述?在Python多重繼承中,父類使用子定義變量有多糟糕?

+1

你可能想,因爲它似乎你正在做一個抽象基類來看看ABC http://docs.python.org/library/abc.html – 2012-07-18 15:31:54

回答

1

我沒有看到任何理由不這樣做。我會建議在基類中添加類似first, second = None, None的東西(或者創建一個更高的級別,以使這兩個類繼承)來說明子類未能設置這些值的情況,但除此之外,這應該沒問題。

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!'