2015-11-13 70 views
1
class Player: 

    def __init__(self, name=None): 
     self.name = name 
     self.score = 0 

    def add_score(self, score): 
     self.score = self.score + score 



class HumanPlayer(Player): 

    def __init__(self): 
     Player.__init__(self, name="Human") 


class ComputerPlayer(Player): 

    def __init__(self): 
     Player.__init__(self, name="Eliza") 


class Score: 

    def __init__(self, human, computer): 
     self.human = human 
     self.computer = computer 

    def add_score(self, player, score): 
     self.player.add_score(score) 

我的問題是在Score類中的add_score方法。關於在Python中繼承的面向對象設計

在Python方面:

由於兩個humancomputerPlayer類繼承的(他們有自己的方法,但在這個問題上省略),我怎麼可以指他們在add_score方法? (需要明確的是:我想說add_scorePlayer類繼承的任何對象[不要緊,如果指的是「add_score任何對象無論是從Player類或從Player類繼承的任何對象」?])

+1

是否要添加代表使用語言的標籤? – Marged

+0

對於1,你說的是在你的'score'類或'human'和'computer'類中引用'human'和'computer'的成員嗎? –

回答

0

那麼,你在你的例子中使用python,所以這個問題有幾個答案。有OOP這樣做的方式,然後有pythonic這樣做的方式。

這樣做的OOP方式是你的__str__(python的版本ToString)將是抽象的(或以其他方式實現),你會覆蓋派生類中的。儘管如此,你不會使用ToString - 你會爲此專門定義一個抽象方法。也許PrintScore

也就是說,在這個例子中你對OOP的使用也不是很好。 ComputerPlayerHumanPlayer是否有不同的實現,導致需要派生類?鑑於你的例子(也許你有更多的計劃),你不會。您可以使用Player類別並創建屬性「IsAI」。爲電腦播放器設置爲true,爲人類播放器設置爲false。

我並不是說這聽起來很重要,所以請不要這樣說。我只是想提供一些指導。