मुझे पता है कि इस प्रश्न का वाक्यांश थोड़ा हटकर हो सकता है, लेकिन कृपया मुझे समझाने की अनुमति दें। यह एक सामान्य पायथन प्रश्न भी है, लेकिन मैं इसे समझाने के लिए एक विशिष्ट मामले का उपयोग कर रहा हूं


[मैं स्टाइलशीट या थीम के समूह के साथ काम कर रहा हूं dash_bootstrap_components। और अब मैं एक अधिक सामान्य अजगर समस्या पर ठोकर खाई है जिसके बारे में मैं कुछ समय से सोच रहा था। आप निम्न स्निपेट के साथ एक डैश ऐप सेट कर सकते हैं जहां अंतिम पंक्ति एक स्टाइलशीट निर्दिष्ट करती है:

from jupyter_dash import JupyterDash
import dash_bootstrap_components as dbc
app = JupyterDash(external_stylesheets=[dbc.themes.SLATE])

लेकिन मान लें कि मैं उस विषय को एक चर नाम का उपयोग करके असाइन करना चाहता हूं, न कि उसके स्पष्ट नाम SLATE - उदाहरण के लिए जब कोई अन्य स्टाइलशीट सेट करना या विशेष स्टाइलशीट को उपयोगकर्ताओं के चयन के लिए एक विकल्प देना। मैं मॉड्यूल के माध्यम से कैसे लूप कर सकता हूं या SLATE के बजाय एक चर नाम का उपयोग करके थीम का चयन कैसे कर सकता हूं?

पोस्ट वेरिएबल की सूची कैसे प्राप्त करें विशिष्ट पायथन मॉड्यूल? दिखाता है कि इस तरह से एक मॉड्यूल के माध्यम से लूप कैसे करें:

[item for item in dir(dbc.themes) if not item.startswith("__")]

लेकिन मुझे अभी भी किसी तरह विषय का चयन करना होगा। ये कुछ चीजें हैं जिन्हें मैंने आजमाया है:

myVar = 'SLATE'
themed_app = JupyterDash(external_stylesheets=[dbc.themes[myVar])

मुझे एहसास है कि यह बुनियादी पायथन समझ की कमी है जो यहां समस्या है, लेकिन मैं वास्तव में जानना चाहता हूं कि यह क्यों विफल रहता है और इसके बजाय क्या किया जा सकता है।

0
vestland 18 सितंबर 2020, 11:23

2 जवाब

सबसे बढ़िया उत्तर

किसी विशेषता को गतिशील रूप से एक्सेस करने के लिए getattr का उपयोग करें।

themed_app = JupyterDash(external_stylesheets=[getattr(dbc.themes, myVar)])
2
vestland 18 सितंबर 2020, 11:45

आप eval को गतिशील रूप से एक्सेस करने के लिए एक अन्य समाधान के रूप में उपयोग कर सकते हैं

var = "SLATE"
sheet = f"dbc.themes.{var}"    
themed_app = JupyterDash(external_stylesheets=[eval(sheet)])
1
Ajay A 18 सितंबर 2020, 11:35