Çok çeşitli giriş türlerini kullanan bir fonksiyona sahibiz: bir fonksiyon, bir dize, derlenmiş bir düzenli ifade, bir Hamcrest Matcher ve bir girişin türüne göre uygun bir listeyi filtreler.Adayı içe aktarmadan isinstance
Şu anda isinstance(our_filter, hamcrest.matcher.Matcher)
kullanıyoruz, ancak bu Hamcrest'in yüklenmesini gerektiriyor.
inspect.getmro(type(POSSIBLE_MATCHER))
; ama bu kirli hissettiriyor. Ayrıca, içe aktarma ifadesinin etrafında try
/except
seçenekleriyle birlikte olabilir.
En iyi yaklaşım nedir?
[x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))]
['hamcrest.core.core.isequal.IsEqual', 'hamcrest.core.base_matcher.BaseMatcher', 'hamcrest.core.matcher.Matcher', 'hamcrest.core.selfdescribing.SelfDescribing', '__builtin__.object']
Benzer bir sorunla karşılaştım ve 'str (data .__ class__) == ':' i kullanarak kullanmayı bitirdim. ilk kullanımda, bazı durumlarda sinir bozucu gecikmeye neden olabilir ve tabii ki sonunda içe aktarma modülüne ihtiyacınız olmadığına karar verdiyseniz, bu durumda giriş farklı türdeydi. –