class IFikoSinyal(object):
    def __init__(self):
        self.__fonksiyonlar = []
        self.__bloke = False

    def calistir(self, *args, **kwargs):
        if not self.__bloke:
            for subs in self.__fonksiyonlar:
                try:
                    subs(*args, **kwargs)
                except:
                    pass

    def ekle(self, fonk):
        self.__fonksiyonlar.append(fonk)

    def sil(self, fonk):
        try:
            self.__fonksiyonlar.remove(fonk)
        except ValueError:
            print('Dikkat: %s Fonksiyonu Silinemedi '
                  '--> %s' % (fonk, self))

    def temizle(self):
        self.__fonksiyonlar.clear()

    @property
    def bloke(self)->bool:
        return self.__bloke

    @bloke.setter
    def bloke(self, value:bool):
        self.__bloke = value

    @property
    def sayisi(self)->int:
        return len(self.__fonksiyonlar)

    @property
    def liste(self)->list:
        return self.__fonksiyonlar

    def __call__(self, *args, **kwargs):
        self.calistir(*args,**kwargs)

    def __getitem__(self, item):
        return self.__fonksiyonlar[item]
