Wszyscy słyszeliśmy, że używanie from module import *
jest złym pomysłem. Czy istnieje jednak sposób na importowanie podzbioru z zakresu zawartości module
przy użyciu symbolu wieloznacznego?Python: import podzbiorów wieloznacznych
Na przykład:
module.py:
MODULE_VAR1 = "hello"
MODULE_VAR2 = "world"
MODULE_VAR3 = "The"
MODULE_VAR4 = "quick"
MODULE_VAR5 = "brown"
...
MODULE_VAR10 = "lazy"
MODULE_VAR11 = "dog!"
MODULE_VAR12 = "Now"
MODULE_VAR13 = "is"
...
MODULE_VAR98 = "Thats"
MODULE_VAR99 = "all"
MODULE_VAR100 = "folks!"
def abs():
print "Absolutely useful function: %s" % MODULE_VAR1
Oczywiście nie chcemy używać from module import *
ponieważ chcemy być nadrzędne funkcję abs
. Załóżmy jednak, że chcemy, aby wszystkie zmienne MODULE_VAR*
były dostępne lokalnie.
Po prostu wstawienie from module import MODULE_VAR*
nie działa. Czy istnieje sposób, aby to osiągnąć?
Użyłem 100 zmiennych jako ilustrację, ponieważ wykonanie from module import MODULE_VAR1, MODULE_VAR2, MODULE_VAR3, ..., MODULE_VAR100
byłoby oczywiście niesamowicie nieporęczne i nie działałoby, gdyby dodano więcej zmiennych (np. MODULE_VAR101
).
To jest świetne! Ale czy jest jakiś sposób osiągnięcia tego samego efektu, jeśli nie masz kontroli nad kodem źródłowym modułu? – seaotternerd
Przepraszam, że źle zrozumiałem. Nie wiem w żaden sposób, aby natywnie importować określone zmienne z innego modułu. Ale jako bardzo proste rozwiązanie można utworzyć pomocnika, który importuje moduł i iteruje po atrybutach modułu, aby wyodrębnić pożądane zmienne. W twoim przykładzie uniemożliwiłoby to przesłonięcie zmiennej 'abs', ponieważ nie importujesz zmiennych modułu, ale sam moduł. Alternatywnie można * zaimportować * zmienne modułu w zakresie funkcji, uniemożliwiając zastąpienie wbudowanej funkcji 'abs'. Myślę, że @jsbueno ma doskonały przykład. – kuujo
Nie wiem, czy źle zrozumiałeś - nie byłem osobą, która zadała pytanie, byłem po prostu ciekawy. Dzięki! – seaotternerd