亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python3:類組合和派生方法

Python3:類組合和派生方法

躍然一笑 2023-08-22 15:57:16
早上好,我正在嘗試這樣的事情:class Fish:  def __init__(self, name):    self.name = name  def swim(self):    print(self.name,"is swimming!")我的建議是將課程擴展到 Aquarium,其中包含魚類字典:class Aquarium(Fish):  def __init__(self, **kwargs):    self.fishes ={}    for _, name in kwargs.items():      self.fishes[name] = Fish.__init__(self,name)    def how_many(self):    print("In acquarium there are",len(self.fishes),"fishes")    def all_swimming(self):#???是否可以實現像 Aquarium.swim() 這樣的東西來使用插入的所有類的方法?我嘗試過,但結果它只打印出最后插入的魚。有什么建議嗎?如何在 Aquarium() 中收集許多 Fish()?有更好的方法嗎?
查看完整描述

2 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

看來您混淆了“是一種”和“包含”的概念。寫作class Aquarium(Fish)表明這Aquarium是一種Fish,但事實并非如此。AnAquarium包含魚。因此,Aquarium不應該源自Fish。


我認為這更像是你的意圖:


class Fish:

    def __init__(self, name):

        self.name = name


    def swim(self):

        print(self.name, "is swimming!")



class Aquarium:  # An aquarium is not a kind of fish, rather it contains fish

    def __init__(self, **kwargs):

        self.fishes = []  # list of all fishes in the aquarium


        fishes = kwargs["fishes"]

        for fish_name in fishes:

            new_fish = Fish(fish_name)

            self.fishes.append(new_fish)  # add to your list


    def how_many(self):

        print("In aquarium there are " + str(len(self.fishes)) + " fishes")


    def all_swimming(self):

        print("The list of all fishes in the aquarium:")

        for fish in self.fishes:

            print("  " + fish.name)



a = Aquarium(fishes=["Nemo", "Dory"])

print(a.how_many())

a.all_swimming()


查看完整回答
反對 回復 2023-08-22
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

對的,這是可能的。但我認為這是一個更好的方法。


class Fish:

  def __init__(self, name:str):

    self.name = name

  def swim(self):

    print(self.name,"is swimming!")

    

    

class Aquarium():

  def __init__(self, fishes:Fish):

    self.fishes = []

    for fish in fishes:

      self.fishes.append(fish)

  

  def how_many(self):

    print("In acquarium there are",len(self.fishes),"fishes")

  

  def all_swimming(self):

      for fish in self.fishes:

          fish.swim()

以下是您可以更正的建議列表:

  1. 水族館不是魚。不要繼承它!如果您需要 Fish 類的某個方面,則拆分該類并進行組合。

  2. 字典用于存儲鍵和值。但魚已經知道這個關鍵了。那么為什么不使用列表呢?你需要字典嗎?如果不使用列表,則更容易使用(這只是我個人的意見)。

  3. 你使用了**kwargs。雖然這是可用的,但沒有人能清楚地理解您到底想要這些參數是什么。通常最好使用一組明確定義的參數。

  4. 使用打字。至少對于參數而言。這對于更好地理解您的代碼確實很有幫助。如果您這樣做,您的 IDE 也可能會變得更有幫助。


查看完整回答
反對 回復 2023-08-22
  • 2 回答
  • 0 關注
  • 1656 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號