Когда вы перебираете список и присваиваете текущую переменную, вы не изменяете значение в списке, вы изменяете только эту локальную переменную.
Например,
>>> l = [1,2,3]
>>> for i in l:
... i += 1
...
>>> l
[1, 2, 3]
Чтобы изменить список, вы должны создать новый список, поскольку вы можете столкнуться с проблемами, если вы измените список, по которому вы перебираете.Этот новый список можно назвать как-то вроде sharks
- где элементы содержат экземпляры класса.
Наконец, у вас также есть недопонимание с методами ... Вам не нужно передавать ссылку на объекткаждый раз, когда вы вызываете метод в экземпляре.Аргумент self
функции метода автоматически принимает значение экземпляра, из которого вызывается метод.
В результате получается окончательный код:
class SwimmingWithTheFishes:
def __init__(self, typeofshark):
self.name = typeofshark
def __str__(self):
return f"I am a {self.name} shark."
def reporting(self):
print(f"This is a {self.name} shark method.")
def main():
# shark_types = [{"name": "mako"}, {"name": "hammerhead"}, {"name": "greatwhite"}, {"name": "reef"}]
shark_types = ["mako", "hammerhead", "greatwhite", "reef"]
sharks = []
for type_ in shark_types:
shark = SwimmingWithTheFishes(type_)
sharks.append(shark)
print(f"Heavens above, that's no fish: {shark.name}")
shark.reporting()
for shark in sharks:
print(shark)
if __name__ == "__main__":
main()
, который дает:
Heavens above, that's no fish: mako
This is a mako shark method.
Heavens above, that's no fish: hammerhead
This is a hammerhead shark method.
Heavens above, that's no fish: greatwhite
This is a greatwhite shark method.
Heavens above, that's no fish: reef
This is a reef shark method.
I am a mako shark.
I am a hammerhead shark.
I am a greatwhite shark.
I am a reef shark.