Başka Bir Dosyadan Class İçerisindeki Fonksiyona Ulaşmak

Merhaba.

Bir ornek.py adında bir dosyamız var.
İçerisinde class yapısı olsun ve class içerisinde de Listele fonksiyonu olsun.

Bir tane de ornekislem.py dosyamız olsun.

  • ornekislem.py dosyasının içerisinde bir class varsa bu class içerisinden ornek.py dosyasının içerisindeki Listele fonksiyonuna nasıl erişip çalıştırabiliriz?

  • ornekislem.py dosyasının içerisinde bir class yapısı yoksa bu dosya içerisinden ornek.py dosyasının içerisindeki Listele fonksiyonuna nasıl erişip çalıştırabiliriz?

ornek.py

import sys
from PyQt5.QtWidgets import *

class Pencere(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.Init_Ui()

    def Init_Ui(self):
       # Arayüz Kodları

    def Listele(self):
        print("Listeleme Fonksiyonu")


def main():
    uygulama = QApplication(sys.argv)
    pencere = Pencere()
    sys.exit(uygulama.exec_())

if __name__ == "__main__":
    main()

ornekislem.py (class yapısında)

import sys
from PyQt5.QtWidgets import *

class Kitap(QDialog,Ui_Dialog):
    def __init__(self):
        super(OduncKitap,self).__init__()
        self.setupUi(self)
        self.Init_Ui()
        self.Listeler()

    def Init_Ui(self):
        # Arayüz Kodları

	# Bu classtan ornek.py dosyası içerisindeki class'ın Listele fonksiyonuna nasıl ulaşırız?

ornekislem.py (class yapısız)

import sys
# Buradan ornek.py dosyası içerisindeki class'ın Listele fonksiyonuna nasıl ulaşırız?

ornekislem.py ve ornek.py dosyalarını aynı klasörde bulundurursanız, birbirlerini import edebilirsiniz.

ornek.py:

class Sinif_1:
    def __init__(self):
        pass

    def listele(self):
        print("Listeleme Fonksiyonu")

ornekislem.py:

from ornek import Sinif_1

S1 = Sinif_1()

class Sinif_2:
    def __init__(self):
        pass

    def calistir(self):
        S1.listele()

S2 = Sinif_2()

S2.calistir()

Çıktı:

Listeleme Fonksiyonu
3 Beğeni

Bu ifadenin bulunduğu bir kodda, bu kod parçasını başka bir dosyadan çağırırsan, çalışmaz. Else bloğu açıp başka bir yerden (örneğin @Gok_Mavisi_Anka’nın dediği gibi, aynı dizindeki başka bir dosyadan) çağrıldığında ne yapması gerektiğini yazman lazım.

3 Beğeni

Import esnasinda kod calistirmak cok kotu bir stil. Sadece mevcut modulun ve import edilen diger modullerin dogru import edilebilmeleri icin gereken kodun calistirilmasi lazim.

3 Beğeni

Çok doğru. İçinden bir/birkaç fonksiyon çağırmak için yazılmış modülün çağrıldığı gibi çalışması istenmeyen bir durum. Sadece __name__ == "__main__" kısmına dikkat çekmek istedim.

Düzenleme: Eski yanıtımı silip, cevap olarak göndermeye çalıştım da sanırım beceremedim…

2 Beğeni

Merhaba.
ornekislem.py dosyasına main.py’yi import ettim.
Ve burada sadece Listele fonksiyonunu çalıştırmak istiyorum diyelim.

main py’nin import ettiğim yerde çalışması için if __name__ == "__main__": kısmının else kısmı nasıl olmalıdır?

ornek.py

class Sinif_1():
    def __init__(self):
        pass

    def listele(self):
        print("Listeleme Fonksiyonu")

def main():
    uygulama = QApplication(sys.argv)
    pencere = Sinif_1()
    sys.exit(uygulama.exec_())

if __name__ == "__main__":
    main()
else:
# main.py dosyasının import edildiği yerde sadece Sınıf_1 classı'nın Listele fonksiyonunun çalışması için bu kısım nasıl olmalıdır?

ornekislem.py

from ornek import Sinif_1

S1 = Sinif_1()

class Sinif_2:
    def __init__(self):
        pass

    def calistir(self):
        S1.listele()

Bu işlemi niçin ornekislem modülü içerisinde yapmıyorsunuz?

Şöyle anlatayım.
ornek.py adlı dosyamda Kitapları listeliyorum. Yani Kitap Listele fonksiyonum var.
ornekislem.py dosyasında da Kitap Ekleme formu var.

Amacım Kitap ekleme işlemi yapıldığı zaman Kitap Listeleme fonksiyonun yenilenmesi. Yani en son eklenen kitabı listede görmek istiyorum.

Bu sorununuz @Gok_Mavisi_Anka tarafından en başta cevaplanmamış mı zaten?

Örnekteki gibi kodlarımı uyarladım program açılıyor ama pencere gelmiyor. Sonra kapanıyor ve Process finished with exit code -1073740791 (0xC0000409) yazıyor.