Jestem całkiem nowy, Python i masz pytanie dotyczące następujących klas:Najlepsze praktyki przy definiowaniu zmiennych instancji
class Configuration:
def __init__(self):
parser = SafeConfigParser()
try:
if parser.read(CONFIG_FILE) is None:
raise IOError('Cannot open configuration file')
except IOError, error:
sys.exit(error)
else:
self.__parser = parser
self.fileName = CONFIG_FILE
def get_section(self):
p = self.__parser
result = []
for s in p.sections():
result.append('{0}'.format(s))
return result
def get_info(self, config_section):
p = self.__parser
self.section = config_section
self.url = p.get(config_section, 'url')
self.imgexpr = p.get(config_section, 'imgexpr')
self.imgattr1 = p.get(config_section, 'imgattr1')
self.imgattr2 = p.get(config_section, 'imgattr2')
self.destination = p.get(config_section, 'destination')
self.createzip = p.get(config_section, 'createzip')
self.pagesnumber = p.get(config_section, 'pagesnumber')
to jest ok, aby dodać więcej zmiennych instancji w innej funkcji, get_info
w tym przykładzie, lub czy najlepiej jest definiować wszystkie zmienne instancji w konstruktorze? Czy nie może to prowadzić do kodu spaghetti, jeśli zdefiniuję nowe zmienne instancji w całym miejscu?
EDYCJA: Używam tego kodu za pomocą prostego skrobaka obrazu. Via get_section
Zwracam wszystkie sekcje w pliku konfiguracyjnym, a następnie iteruję je, aby przejść do każdej witryny, z której zbieram obrazy. Dla każdej iteracji wykonuję połączenie z get_section
, aby uzyskać ustawienia konfiguracyjne dla każdej sekcji w pliku konfiguracyjnym. Jeśli ktoś może wymyślić inne podejście, będzie dobrze! Dzięki!
http://stackoverflow.com/questions/2964230/python-how-should-i-make-instance-variables-available –
"Jaźń.__parser = None' powinno być ustawione na początku '__init __()'. Powód jest taki, że '__init __()' jest nazywany pierwszym mentodem * istniejącego * obiektu. Jeśli analizator składni nie odczyta pliku konfiguracyjnego i zgłosi wyjątek, wyjątek może zostać przechwycony w innym miejscu (program może nie zostać zakończony). Następnie obiekt klasy 'Configuration' nadal istnieje, a późniejsze' get_info() 'spowoduje, że instancja * AttributeError: Configuration nie ma atrybutu" __parser ". – pepr
@pepr Czy powinienem przeczytać odpowiedź, że powinienem dodać 'self .__ parser = None' na początku' __init __. Py' lub czy sugerujesz przenieść inicjalizację parsera z '__init __. Py' do innej funkcji? – happygoat