Kodunuzda “init” methodunun parametrelerine çalışma esnasında bir defa belirlenecek kalıcı bir öntanımlı değer atadığınızın farkında mısınız? Yani “input” fonksiyonları “order2 = Orders()” dendiğinde değil “Orders” sınıfı tanımlanırken çalışıyor.
“Orders” sınıfını parametresiz bir şekilde her çağırışımızda nitelikleri aynı değerlere sahip örnekler dönecek.
Evet farkındayım, order1 = Orders yaptığınızda order1 değişkenini sınıfa eşitlemiş olursunuz ve inputlar çalışır ama sınıftan bir örnek oluşturulmaz. Ayrıca input fonksiyonları order2 = Orders() dendiğinde de çalışıyor. Yani her iki durumda da inputlar çalışıyor ancak Orders() yaptığımız zaman sınıftan bir örnek oluşur…
order1 = Orders
print(order1.order_list) # Boş liste
order2 = order1()
print(order1.order_list)
Yani burada Orders sınıfını order1 isimli bir değişkene eşitlemeye zaten gerek yok. Direk örnek oluşturmak gerekiyor.
Sanırım aramızda bir iletişimsizlik oldu ancak şunu söyleyeyim, ben Python3.7.4’te bu kodu çalıştırdığımda:
class Orders(): #SİPARİŞ
buyers_list = []
code_product = {1:"Elma",
2:"Armut",
3:"Nar",
4:"Karpuz",
5:"Domates",
6:"Salatalık",
7:"Biber"}
def __init__(self,
name: str = input("İsim : "),
surname: str = input("Soyisim : "),
number: int = input("Tel No : ")):
self.name = name
self.surname = surname
self.number = number
etkileşimli kabuktaki çıktılar eksiksiz bir şekilde bu oluyor:
İsim : Ekrem
Soyisim : Dinçel
Tel No : 123
>>> örnek = Orders()
>>> örnek.name
Ekrem
>>> örnek.surname
Dinçel
>>> Orders.__init__.__defaults__
('Ekrem', 'Dinçel', '123')
Demek istediğim bu. Umarım anlaşılır olmuştur.
Evet farkındayım, order1 = Orders yaptığınızda order1 değişkenini sınıfa eşitlemiş olursunuz ve inputlar çalışır ama sınıftan bir örnek oluşturulmaz.
Değer atama işlemi yapıldığında input lar çalışmaz. Sadece Orders.__init__ fonksiyonu tanımlanırken input lar çalışıyor.
Ayrıca input fonksiyonları order2 = Orders() dendiğinde de çalışıyor.
Demek istediğim de bunun yanlış olduğu. Bir örnekleme işlemi yapıldığına input fonksiyonu çalışmıyor, daha önceden çalışan input fonksiyonlarının döndürdüğü değerler kullanılıyor.