NecoTheGrim
Kilopat
Daha fazla
- Cinsiyet
- Erkek
- Meslek
- Bilgisayar mühendisliği öğrencisi
Python:
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.
Merhabalar. "name, price, quantity" sütünlarına sahip bir Csv dosyasındaki değerleri attribute'a çevirip bunlardan instance oluşturan bir Python programı yazdım.
Classmethod metodunda her instance oluştuğunda __init__ fonksiyonu çalışıyor ama bir sorum olucak. Normalde __init__ fonksiyonuna parametre olarak bir self parametresi yollamamız gerekiyor. Örnek olarak "item1 = Item("phone", 100 , 5)" instance'ı oluştururken item1, self parametresi iken phone, 100, 5 ise sırasıyla name, price ve quantity parametreleri oluyor. Ama classmethod metoduna baktığınızda ise üstteki yaptığım örnekteki gibi kendimiz instance oluşturmuyoruz. Bu instance'lar classmethod metodunda oluşturuluyor ve her oluşturulduklarında __init__ fonksiyonu çalışıyor ama sorun şu ki üstteki verdiğim örnekteki gibi yollayabileceğimiz bir self parametresi yok. "item1" gibi kendimiz instance da oluşturmuyoruz. Nasıl oluyor da self parametresi yollanmadan __init__ fonksiyonu çalışabiliyor? Yardım ederseniz çok sevinirim.