import csv
#Class method ve csv dosyasını okutup instance yaratma:
class Item:
objects=[] #instance depolamak için boş bir class variable olan objects list tanımladık.
def __init__(self,name: str,price: float,quantity=0):
assert price>=0, f"Price {price} is not greater or equal to zero"
assert quantity>=0, f"Quantity {quantity} is not greater or equal to zero"
self.name=name
self.price=price
self.quantity=quantity
Item.objects.append(self) #classmethod içinde her instance tanımlandığında __init__ fonksiyonu çalışacak ve instancelar append ile depolanacak.
@classmethod
def create_instance_with_csv(cls): #parametre olarak classın kendisini yani Item classını yollamamız gerekiyor. cls, Item classını tutuyor.
with open("items.csv", "r") as folder: #burada items.csv dosyasını okutuyoruz ve adını kendimiz koyduğumuz folder'a tanımlıyoruz.("r" = read demek)
reader = csv.DictReader(folder) #csv dosyasını tutan folder'ı csv.DictReader(folder) ile dicte çevirdik ve reader'a eşitledik.
item_list_with_dict = list(reader) #reader'ı liste çevirdik. item_list_with_dict, dict depolamış bir list oldu. her indexte dict var.
for i in item_list_with_dict: #i, list içindeki her bir dicti teker teker tutuyor.
cls( #cls(name,price,quantity) şeklinde Item classına bağlı instancelar oluşuyor ve her defasında __init__ çalışıyor.
name = i.get("name"), #i'nin tuttuğu dictteki valueları, (name,price,quantity)'e atayıp classa parametre olarak yolluyoruz.
price = float(i.get("price")), #csv dosyasındaki valuelar string olduğundan price'ı float, quantity'i integer yapıyoruz.
quantity = int(i.get("quantity"))
)
def __repr__(self):
return f"Products('{self.name}', '{self.price}', '{self.quantity}')"
Item.create_instance_with_csv() #Bu method ile class içinde, csv dosyasındaki valueları attribute olarak kullanan instancelar oluşturuyoruz.
#Item classını parametre olarak classmethoda yolluyoruz.
print(Item.objects) #class'taki liste depolanmış bilgileri basıyoruz. __repr__ methodu önceki bölümde işlendi. ona bak.