Oopyle ilgili bir soru

merhaba.pythonda soyle bir sey yaptim:

class isci():
    isciler = []
    def __init__(self,ad,soyad,maas,status):
        self.ad = ad
        self.soyad = soyad
        self.maas = maas
        self.status = status
        self.guc = 0
        liste = [self.ad,self.soyad,self.maas,self.status,self.guc]
        self.isciler.append(liste) 
    def melumat(self):
        print(f"adi: {self.ad}\nsoyadi: {self.soyad}\nmaasi: {self.maas}\nstatusu: {self.status}\ngucu: {self.guc}")
    @classmethod
    def personel(cls):
        print(cls.isciler)


class mudur(isci):# mudur azerbaycanca yonetici demek(galiba turkcede vardi ama)
    def __init__(self,ad,soyad,maas,status):
        super().__init__(ad,soyad,maas,status)
        self.guc = 10
        # liste = [self.ad,self.soyad,self.maas,self.status,self.guc]
        

isci1 = isci("vahid","veliyev",700,"isci")
# isci1.melumat()
mudur1 = mudur("abdullah","veliyev",1000,"mudur")
# mudur1.melumat()
print(mudur1.guc)
isci.personel()

eger kodlari incelediyseniz ne yapmak istedigimi anlamissinizdir.burada bir isci adli taban sinifi olusturdum.daha sonra mudur sinifi olusturdum ve isci sinifini miras verdim.bir tanede sinif niteligi olusturdum.biz her ornek niteligi olusturdugumuzda isciler adli sinif metoduna bilgileri ekleniyor.her sey dogru bir sekilde ekleniyor ama guc disinda.guc parametresi her zaman taban sinifin parametresini(0) ekliyor.ama ben bunun her sinif icin ayri ayri yani mudur sinifi icin 10,isci sinifi icin 0 eklensin istiyorum(simdi aklima geldide if kontroluyla yapila bilir ama ozaman ekstradan bir paramemtre vermemiz gerekir(belkide gerekmez(olsa bile kullanissiz(cok fazla kod oldugunda)))).bunu nasil yapa bilirim arkadaslar?lutfen bilgisayari parcalamadan birisi yadim etsin.tesekkurler.

Yerine şunu kullanmayı denediniz mi:

self.isciler.append(self)

Böylece örnek nitelikleri yerine örneğin kendisini saklamış olursunuz. Zaten örnek üzerinden niteliklerine erişebilirsiniz.

1 Beğeni

hocam soyle bir sey dedi:

[<__main__.isci object at 0x7f6a41c72e80>, <__main__.mudur object at 0x7f6a41cbac40>]

bu objeyi bir turlu ceviremedim.bu arada bir fonksiyonun icinde ekledigimde ornegin:

    def melumat(self):
        liste = [self.ad,self.soyad,self.maas,self.status,self.guc]
        self.isciler.append(liste) 
        print(f"adi: {self.ad}\nsoyadi: {self.soyad}\nmaasi: {self.maas}\nstatusu: {self.status}\ngucu: {self.guc}\n")

dogru duzgun calisiyor.ama __init__de ekledigimde calismiyor(istedigim gibi).lutfen yardim edin

self ile isciler listesine ulaşamassın çünkü isciler listesi senin isci sınıfının bir özelliği. isciler listesine ekleme yapabilmek için sınıfı kendi içinde kullanmalısın ama örnek almadan yapmalısın yani şöyle:

isci.isciler.append(liste)

şeklinde yapmalısın. isci den sonra parantez olmamasına dikkat et. eğer parantez olursa örnek almış olursun

baska bir fonksiyonda olusturarak __init__e gondermeyi denedim ama olmadi yine:(

yine ayni cikti:

[<__main__.isci object at 0x7f3f33797e80>, <__main__.mudur object at 0x7f3f337dfc40>]

bir obje olusturuyor.ben bu objeyi donusturemedim bir turlu

cok pardon az once yanlis yazdigim icin bir obje olustu.sizin dediginiz gibi yazdigimda calismiyor.eskisi gibi sonuc.ben @EkremDincel in dedigi gibi yazdigimda obje olusuyor.

parantez koyarsan obje oluşturur.

‘’’

class isci():

isciler = []

def __init__(self,ad,soyad,maas,status):

    self.ad = ad

    self.soyad = soyad

    self.maas = maas

    self.status = status

    self.guc = 0

    liste = [self.ad,self.soyad,self.maas,self.status,self.guc]

    isci.isciler.append(liste)

def melumat(self):

    print(f"adi: {self.ad}\nsoyadi: {self.soyad}\nmaasi: {self.maas}\nstatusu: {self.status}\ngucu: {self.guc}")

@classmethod

def personel(cls):

    print(cls.isciler)

class mudur(isci):# mudur azerbaycanca yonetici demek(galiba turkcede vardi ama)

def __init__(self,ad,soyad,maas,status):

    super().__init__(ad,soyad,maas,status)

    self.guc = 10

    # liste = [self.ad,self.soyad,self.maas,self.status,self.guc]

isci1 = isci(“vahid”,“veliyev”,700,“isci”)

isci1.melumat()

mudur1 = mudur(“abdullah”,“veliyev”,1000,“mudur”)

mudur1.melumat()

print(mudur1.guc)

isci.personel()

‘’’

Bİr sorun oldu kodları tam aktaramadım ama tek yapman gereken self.isciler.append yerine isci.isciler.append i kullanacaksın

evet iste dediginiz gibi yapiyorum sonuc ayni.(parantezsiz)

sys ile kalıcı çıktı ayarlarıyla oynadınız mı hiç ?

hayir

aslinda dediginiz cok mantikli olmasi gerekiyor.

Bu dedikleriniz yanlış, örnekte bulunamayan nitelikler sınıfta aranır.

? Bende aynısından bahsettim. Örnekte isciler niteliğini bulamayacağı için örnek almadan yapmalısın dedim

nasil olucak peki bu is?

Python, örnekte istediğimiz niteliği bulamayınca bu niteliği örneğin sınıfında arar. Dediğiniz şey konudaki soruna çözüm değil, ayrıca yapılmasına da gerek yok. Hatta yapılması tavsiye edilmez çünkü sınıfları miras alarak kullanmayı zorlaştırır.

Bunu bilmiyordum. Hangi sürümlerde geçerli ?

Python2 hiç kullanmadım ve kullandığım bütün Python3 sürümlerinde bu geçerliydi. Siz dediğimi bir deneyin istiyorsanız, hata vermeyecektir.

arkadaslar coze bilen yokmu bu sorunu?