from abc import ABC, abstractmethod class Plant: #tworzymy jakas rosline co ma nazwe,i id. ID powiedzmy ze buraki beda mialy 1, marchewki 2 itd. gleby powiedzmy tez damy 4 i beda mialy id 5-8 def __init__(self, name, ID): super().__init__() self._soil = -1 #jak tworzymy rosline to nie bedzie ona miala gleby self._name = name #to nazwa rosliny będzie np. burak1 self._id = ID #id rosliny buraki bedą mialy 1, i po tym inne obiekty beda rozpoznawac ten obiekt self._collect = 0 #nowa roslina jest w 0% dojrzala #to jest jakbysmy usuneli obiekt. zabezpieczenie, zeby gleba pozniej byla wolna def __del__(self): self.leave_soil() #to sie drukuje jak zapytamy o stworzony obiekt def __str__(self): return f'Plant: {self._name}, Soil: {self._soil}, Status: {self.collect()}' #metoda abstrakcyjna, kazda roslina ma inny czas rosniecia wiec pass @abstractmethod def collect(self): pass @abstractmethod def fertillizing(self): pass @abstractmethod def growing(self): pass #pobieramy wspolrzedne roslinki def get_coordinates(self): if self.have_soil(): a = self.get_soil() a.get_coordinates(self) #get coordinates jest metoda w glebie #pobieramy id roślinki def get_id(self): return self._id #dodajemy glebe def add_soil(self, soil): self._soil = soil #zwraca czy roslinka znajduje sie w ziemii obecnie - jak nie ma gleby to znaczy ze nie jest zasadzona jeszcze albo już. def have_soil(self): return self._soil is not -1 #pobieramy jaka ma glebe, gleba tutaj będzie obiektem def get_soil(self): return self._soil #to w przypadku jak bedziemy wyciagac z ziemii roslinke def leave_soil(self): if self.have_soil(): a = self.get_soil() a.plant_remove() #to bedzie metoda w klasie Soil, bedzie usuwac roslinke z gleby self._soil = -1