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 也可能会变得更有帮助。
添加回答
举报