Używam już tej funkcji, aby zmienić jakiś ciąg do obiektu klasy.
Ale teraz zdefiniowałem nowy moduł. Jak mogę wdrożyć tę samą funkcjonalność?
def str2class(str):
return getattr(sys.modules[__name__], str)
Chcę pomyśleć jakiś przykład, ale trudno jest myśleć. W każdym razie głównym problemem jest problem ścieżki pliku.
Jeśli naprawdę potrzebujesz przykładu, kodu Github jest Oto.
Plik Chain.py musi wykonać mechanizm automatycznego działania. Teraz to się nie powiedzie.
nowe podejście:
Teraz umieściłem wszystkie pliki pod jednym filifold i działa, ale jeśli korzystam z koncepcji modułów, nie powiedzie się. Więc jeśli problem jest w pliku modułu, jak mogę zmienić obiekt STRING do obiektu klasy względnej?
Dzięki za pomoc.
2 odpowiedzi
Możesz to zrobić, uzyskując bezpośrednio dostęp do przestrzeni nazw modułu:
import module
f = module.__dict__["func_name"]
# f is now a function and can be called:
f()
Jedną z największych rzeczy o Pythonie jest to, że internalia są dostępne dla Ciebie i że pasują do paradygmatu języka. Nazwa (zmiennej, klasy, funkcji, cokolwiek) w przestrzeni nazw jest w rzeczywistości kluczem w słowniku, który mapuje wartość tej nazwy.
Jeśli jesteś zainteresowany tym, z którymi można grać inne języki, spróbuj uruchomić dir()
na rzeczy. Byłbyś zaskoczony liczbą ukrytych metod dostępnych w większości obiektów.
Prawdopodobnie powinieneś napisać tę funkcję tak, jak:
def str2class(s):
return globals()[s]
Jest naprawdę wyraźniejszy i działa, nawet jeśli __name__
jest ustawiony na __main__
.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.