2009-10-25 20 views
8

İşçerçevemizin bazı çirkin Demirbaş kodunda belirli işlevleri sarma gerektiren bir Python modülüne işlevleri ekleyerek Oldukça zor olmak için, özellikle de çerçeve, modül düzeyinde belirli bir işlev isimleri modelini arar.dinamik

Ben boşuna, dekoratör Aşağıdaki denedim:

current_module = __import__(__name__) 
new_name = prefix + func.__name__ + suffix 
# method A 
current_module[new_name] = func 
# method B 
func.__name__ = new_name 
current_module += func 

Herhangi yardım mutluluk duyacağız!

+1

Bu isimlerde çerçevenin neye ve nasıl benzediğini biraz daha ayrıntılı bir şekilde açıklamanız gerekir. Muhtemelen __getattr__'yi geçersiz kılabilir ya da modülün kendi sözlüğünü taklit edebilirsin, ama bu noktada kesin olarak söylemek imkansız. –

+0

Gerçekten, tam olarak çerçevenin ne yaptığını bilmiyorum. Oren'in küçük hatırlatıcısı ihtiyacım olan şeydi. – AnC

cevap

13

kullanımı ya

current_module.new_name = func 

veya

setattr(current_module, new_name, func) 
+0

Duh, tabiki - ne düşünüyordum ... Teşekkürler! – AnC

0

Bu sorunun çözümü için orijinal fonksiyonu olarak dekore işlev hareket yapmak olacaktır görünüyor.

burada bulunan Twisted gelen işlevi mergeFunctionMetadata kullanmayı deneyin: twisted/python/util.py

Bu umutla çerçeve onu almak yapım orijinal olarak dekore işlev hareket yapar.

+0

Teşekkürler, bu ilginç görünüyor - bunu en iyi nasıl uygulayacağınıza bakmak zorunda. – AnC