Python начал раздражать меня тем, что я не знаю как нормально реализовать классы и их структуру.
Значит суть в чем, есть класс Profile. В этом классе есть другой класс Settings. Пока все окей. Класс Settings - словарь, содержащий настройки (типо... "pass": "123", "autorefresh": "yes"). Этот класс содержит три функции: получение настроек с сайта, передача настроек на сайт и сброс настроек на стандартные.
Открыть спойлер
Закрыть спойлер
class Settings(object):
def __init__(self):
self.settings = {}
class MySettingsParser(HTMLParser):
"""Парсер страницы настроек сайта"""
def __init__(self):
self.tagname, self.b = '', False
def handle_starttag(self, tag, attrs):
tdict = {}
if tag == "input":
tdict = dict((x, y) for x, y in attrs)
if tdict['type'] == "checkbox":
Profile.Settings._settings[tdict['name']] = tdict['value'] if tdict.has_key('checked') else '0'
elif tdict['type'] == "radio":
if tdict.has_key('checked'):
Profile.Settings._settings[tdict['name']] = tdict['value']
else:
Profile.Settings._settings[tdict['name']] = tdict['value']
elif tag == "select":
for attr in attrs:
if attr[0] == 'name':
Profile.tagname = str(attr[1])
elif tag == "option":
for attr in attrs:
if attr[0] == 'selected':
profile.b = True
def handle_data(self, data):
if self.b:
profile.settings[self.tagname] = str(data)
self.tagname = ''
self.b = False
def getSettings(self, refresh = True):
"""Возвращает словарь общих настроек"""
if refresh == True or profile.settings == {}:
f = urllib2.urlopen("http://annimon.com/str/my_set.php").read()
parser = profile.MySettingsParser()
parser.feed(f); parser.close()
return profile.settings
@staticmethod
def setSettings():
"""Отправка общих настроек на сервер"""
params = profile.settings.copy()
for i in params.keys():
if params[i] == '0' and i != 'sdvig':
params.pop(i)
params = urllib.urlencode(params)
urllib2.urlopen("http://annimon.com/str/my_set.php?act=forum", params)
@staticmethod
def setSettingsToDefault():
"""Сброс настроек"""
urllib2.urlopen("http://annimon.com/str/my_set.php?reset")
Не могу разобраться с тем, как поставить правильные связи. То есть если в C# это есть private, public, и тп, то здесь - хз. Задолбался уже. Плюс ко всему не пойму каким образом мне сделать статичный класс.
То есть класс Profile содержится в файле-модуле annimon.
Мне нужно сделать так, чтобы подключив этот модуль import annimon я мог спокойно пользоваться profile и прочими данными. То есть...
import annimon
annimon.Profile.Settings.get() # получаем с сайта
annimon.Profile.Settings['troll'] = 'True'
annimon.Profile.Settings.set() # отправляем на сайт
То есть что-то вроде этого. И так, объясните private-заменители. Ну и если можно, подправить код.