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()

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()
以下是您可以更正的建議列表:
水族館不是魚。不要繼承它!如果您需要 Fish 類的某個方面,則拆分該類并進行組合。
字典用于存儲鍵和值。但魚已經知道這個關鍵了。那么為什么不使用列表呢?你需要字典嗎?如果不使用列表,則更容易使用(這只是我個人的意見)。
你使用了**kwargs。雖然這是可用的,但沒有人能清楚地理解您到底想要這些參數是什么。通常最好使用一組明確定義的參數。
使用打字。至少對于參數而言。這對于更好地理解您的代碼確實很有幫助。如果您這樣做,您的 IDE 也可能會變得更有幫助。
添加回答
舉報