2013-04-18 11 views
18

Bir grup başka dersler tarafından miras alınan A sınıfına sahibim. Bunlardan bazıları benzer olan birkaç fonksiyona sahiptir ve bu işlevleri başka bir yerde tanımlamak ve onlara ihtiyaç duyan sınıflar tarafından adlandırılmak hoş olurdu. Ancak bu işlevler süper sınıfta tanımlanan işlevleri çağırır. Python - Kendinizi harici bir işleve iletmek uygun mu?

class A(): 
    def imp_func(*args): 
     # called by the child class functions 

Class B(A): 
    def common_func(self): 
     # some stuff 
     self.imp_func(*args) 

Yani bir argüman olarak self object almak benim yardımcı fonksiyonları oluşturduk ve ben yardımcı fonksiyonları içinden imp_func çağırabilir.

def helper_func(obj, some_args): 
    # some common stuff 
    obj.imp_func(*args) 

class B(A): 
    def common_func(self): 
     # unique stuff 
     helper_func(self, some_args) 

Bu, sorunu çözer.

Bunu yapmalı mıyım? Bu Pythonic mi?

+3

Bu konuda kesinlikle bir sorun yok. 'self' * sadece * referansın örneğidir, özel değildir ve başka işlevlere geçmek tehlikeli değildir. –

+3

Bunu neden yapmanız gerekiyor? 'B',' A''dan imp_func' öğesini devralır, böylece 'B.common_func''da' self.imp_func (* args) 'diye bir sorun olmadan arayabilirsiniz. –

+0

@FlorianBrucker Yalnızca bir işlev değil, üst sınıftan çağrılan bir çift ve birkaçına birden çok sınıfta birden çok işlevde birkaç kez denir. Bu çok şişkin sınıflara ve işlevlere yol açar. Bu işlevleri yazmak için zaman alıcıdır. Yardımcı sınıfları kullanmak zamandan, çabadan tasarruf edecek ve kodu daha temiz ve daha kalıcı hale getirecektir. – elssar

cevap

24

Bununla ilgili herhangi bir sorun yoktur. self örnekleri her zaman işlevlere (ve diğer sınıfların yöntemlerine) aktarılır.

İlgili konular