Sınıf içindeki metottan değişkene ulaşma

Merhabalar, bir değişkenim var. Bu değişkene self kullanmak istemiyorum çünkü nesneden bağımsız bir değişken. Bu nesneye aşağıda görüldüğü gibi erişmek istiyorum. Ama erişemiyorum.
Daha açık anlatmak gerekirse oluşturulan nesnenin sadece tek bir şeye erişmesini istiyorum. O da burada görülmeyen des() fonksiyonu.

class DES():
    def __init__(self, key):
        self.__key = key

    INITIAL_PERMUTATION_TABLE = (58, 50, 42, 34, 26, 18, 10, 2,
			                    60, 52, 44, 36, 28, 20, 12, 4,
			                    62, 54, 46, 38, 30, 22, 14, 6, 
			                    64, 56, 48, 40, 32, 24, 16, 8, 
			                    57, 49, 41, 33, 25, 17, 9, 1,
			                    59, 51, 43, 35, 27, 19, 11, 3,
			                    61, 53, 45, 37, 29, 21, 13, 5,
			                    63, 55, 47, 39, 31, 23, 15, 7)

    def initital_permutation(data32bit):
        permutate_data = ""
        for index in INITIAL_PERMUTATION_TABLE:
            permutate_data += data32bit[index-1]
        return permutate_data

Nesneden kasit INITIAL_PERMUTATION_TABLE, asagidan kasit da for index in INITIAL_PERMUTATION_TABLE: ise, yapamazsin. self. veya DES. (veya type(self). vs.) kullanman lazim.

Hangi olusturulan nesne? Tek bir sey derken, mesela, print fonksiyonuna erismesini nasil engelleyeceksin?

Sınıf içerisinde onlarca metot var. Bir de des() metodu olacak. Bu des() metodunun altında diğer metodlar kullanılacak ama oluşturulan nesne, des() metodu dışında ki bir metoda erişim sağlayamayacak. Bahsettiğim DES sınıfının altındaki metotlar, fonksiyonlar değil.

Problemi cls parametresini ekleyerek çözdüm. Böylece bahsettiğim fonksiyonlara oluşturulan nesneler ulaşamıyor.

Emin misiniz, örnek verebilir misiniz? Özel (private) bir metot Python’da mümkün değil, başına bir veya iki tane alt tire koyarak ilgili metodun dışarıdan kullanılmasının amaçlanmadığı hakkında sinyal verebilirsiniz ama.

1 Beğeni
def method(cls, param ):
    print(cls.var)

Şu şekilde. Bu şekilde oluşturduğum zaman nesne fonksiyona erişim sağlayamazken, sınıf.method() şeklinde erişim sağlayabliyorum sadece.

class A:
    def method(cls, param):
        print(param * 2)

>>> A().method("evet")
evetevet

Metodun ilk parametresinin adı gelenekten ötürü self olarak adlandırılıyor; ismini cls yapsak da aynı şekilde çalışıyor, yalnız okunabilirliği azaltıp niyeti saklar.

class A:
    def __init__(herhangi_bir_isim):
        herhangi_bir_isim.attr = -2

    def method(baska_bir_isim):
        print(baska_bir_isim.attr + 14)


>>> A().method()
12
2 Beğeni

_method() şeklinde yapıp metoda dışarıdan erişilmemesini anımsatmak daha doğru olacak herhalde.