kullanabilirsiniz:
getattr(obj, t[i])(*args)
geçerli modül
getattr(sys.modules[__name__], t[i])(*args)
args
bir işlevi çağırmak gerekiyorsa bir liste veya gönderilecek argümanların bir listesidir, yoksa bunları başka bir işlevle yaptığınız gibi listeleyebilirsiniz. Eğer aynı nesne üzerinde başka bir yöntemi çağırmak için çalışan bir yöntemde olduğundan, obj
getattr yerine self
ilk birini kullanmak bir nesne ve bir dize alır ve niteliğini dönen nesne içindeki bir özellik arama yapar eğer varsa. obj.x
ve getattr(obj, 'x')
aynı sonucu elde eder. Bu tür yansımalara daha fazla bakmak istiyorsanız, setattr
, hasattr
ve delattr
işlevleri de vardır.
Tamamen alternatif bir yaklaşım:
Bu cevap aldı ilgi miktarının fark ettikten sonra, ben ne yaptığını için farklı bir yaklaşım önermek için gidiyorum. Bazı yöntemler kendilerini bu Verilen
id_to_method = {
0: methA,
1: methB,
2: methC,
}
yöntemlere ben bir sözlük haritalama numaralarını inşa her yöntemin bir sayı (seçime) karşılık gelmesini sağlamak için
def methA(*args): print 'hello from methA'
def methB(*args): print 'bonjour de methB'
def methC(*args): print 'hola de methC'
mevcut varsayıyoruz,
id_to_method[0]()
methA
çağırmak olacaktır. İki bölümden oluşuyor, ilk önce
id_to_method[0]
, fonksiyon nesnesini sözlükten alıyor, daha sonra
()
onu çağırıyor. Ben de size yukarıda muhtemelen örnek yöntemleri dikkate olsaydı güzel çözüm ne olurdu
choice = int(raw_input('Please make a selection'))
id_to_method[choice](arg1, arg2, arg3) # or maybe no arguments, whatever you want
gibi bir şey olurdu verilen, gerçek kodunda argüman
id_to_method[0]("whatever", "args", "I", "want)
geçebileceği? Yani: yazdığınız yöntemlerin artık kendi kendini argümanını içerdiğini düşünün: def methA (self, * args): print 'merhaba methA'dan' fakat ben sözlükleri sınıfta oluşturmak istiyorum (böylece anahtarlar zorunlu olarak okunabilir) bir örneğe sahip olmak ve kurucuda değil. Bunu nasıl yaptı? – marcotamaBağlanmamış yöntemleri ve "getattr" işlevlerini burada olduğu gibi kullanabilirsiniz. Ne istediğini anladığımdan emin değilim. –
Sınıfımın X nesnelerine alternatif "keşif" yöntemleri var. Fonksiyon y kullanıcı ile arayüz oluşturur ve istenen arama yöntemini çağırır. If-elif-elif'e sahip olmaktan ziyade ... daha iyi göründüğü için bir sözlüğe erişmeyi tercih ederim. Ayrıca, sözlük bir sınıf değişkeni olsaydı, anahtarlarına dışarıdan erişebiliyordum. Buradaki sorun, bu keşif yöntemlerinin örnek değişkenlere bağlı olmasıdır. Ben de "getattr" hilesi düşündüm (ve uyguladık), ama sadece hiç hoş görünmüyor. – marcotama