簡體   English   中英

Python類方法繼承

[英]Python class method inheritance

我有兩個類,一個繼承自另一個。 我需要WOFPlayer實例采用 1 個必需參數 - name ,2 個可選參數, WOFComputerPlayer實例需要采用 2 個必需參數 - namedifficulty以及WOFPlayer中的 2 個可選WOFPlayer 我怎么做?

這是我嘗試過的

class WOFPlayer:
    def __init__(self, name, prizeMoney = 0, prizes = []):
        self.name = name
        self.prizeMoney = prizeMoney
        self.prizes = prizes[:]

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, difficulty):
        WOFPlayer.__init__(self, name, prizeMoney = 0, prizes = [])
        self.difficulty = difficulty

提前致謝

我需要 WOFPlayer 的實例來獲取 1 個必需參數 - 名稱,2 個可選參數

我強烈建議您不要使用可變對象(本例中的列表)作為默認參數。 是為什么。

和 WOFComputerPlayer 實例采用 2 個必需參數 - 名稱和難度以及 WOFPlayer 中的 2 個可選參數

您需要將值從 WOFComputerPlayer 傳遞到其基類。 也就是說,將name傳遞給WOFComputerPlayer

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, name, difficulty, prize_money=0, prizes=None):
        WOFPlayer.__init__(self, name, prizeMoney=prize_money, prizes=prizes)
        self.difficulty = difficulty

你比你想象的更近。


class WOFPlayer:
    def __init__(self, name, prizeMoney=0, prizes=None):
        
        self.name = name
        self.prizeMoney = prizeMoney

        if prizes is None:
            prizes = []
        self.prizes = prizes[:]

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, name, difficulty, prizeMoney=0, prizes=None):
        super().__init__(name, prizeMoney, prizes)
        self.difficulty = difficulty

請注意,我將傳遞可變值替換為默認參數。 []作為默認參數將在該值發生變化時發生變化,這可能是錯誤的秘訣。 但其余的代碼是你的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM