Category: English

Date:

Here is the English version.
Nesne yönelimli kod yazarken sınıf özelliklerine (değişkenlerine) sıklıkla verilen argüman değerlerini atarız. Her bir argüman için bu işi yapmak büyük satır kalabalığı demektir. Bakalım:

class Test:
    def __init__(self, x, y, z, t):
        self.x = x
        self.y = y
        self.z = z
        self.t = t
        print self.x,self.y,self.z,self.t

Buradaki tekrar eden benzer satırları yok etmek için bir decorator çözümü geliştirdim:

def injectArguments(inFunction):
    def outFunction(*args,**kwargs):
        _self = args[]
        _self.__dict__.update(kwargs)
        inFunction(*args,**kwargs)
    return outFunction
 
class Test:
    @injectArguments
    def __init__(self, x, y, z, t):
        print self.x,self.y,self.z,self.t
 
    @injectArguments
    def fonksiyon(self, ad):
    print "Ad:",self.ad
 
t = Test(x=4, y=5, z=6, t=7)
t.fonksiyon(ad="Emre")

args, argümanları içeren bir sözlük iken kwargs anahtar kelimeli argümanları içeren bir sözlük. arg[0] selfe karşılık geliyor. Yapacağımız şey self.dict‘i yani t nesnesinin değişkenlerin değerlerini tutan bu sözlüğü verilen anahtar kelimeli argümanlarla ( {‘x':4, ‘y':5,z':6,t':7} ) genişletmek/güncellemek olacak. Bu sayede self.x = x vb. kodlardan kurtulmuş olacağız.

Pythonun kütüphanelerinde bunun için hazır bir çözüm var mı (varsa söyleyin lütfen) bilmiyorum ama bu kodu bir hayli kullanacağım gibi. ActiveState Recipies sitesine koyduğum bu koda yeni bir yorum geldi, keyword kullanmadan (ad="Emre" yerine "Emre" diyerek) bu iş yapılabiliyormuş. Nasıl mı? fonksiyonadi.func_code.co_varnames dediğinizde o fonksiyonun parametrelerinin adlarını öğrenebiliyormuşsunuz. Çok önemli bir bilgi.


Share: FacebookGoogle+Email


comments powered by Disqus