Я нашел эту тему полезной и подумал, что добавлю Javascript-решение, которое вы можете вставить в Firebug.
function string_recurse(active, rest) {
if (rest.length == 0) {
console.log(active);
} else {
string_recurse(active + rest.charAt(0), rest.substring(1, rest.length));
string_recurse(active, rest.substring(1, rest.length));
}
}
string_recurse("", "abc");
Выход должен быть следующим:
abc
ab
ac
a
bc
b
c
def attrsetter(attr):
def set_any(self, value):
setattr(self, attr, value)
return set_any
a = property(fset=attrsetter('_a'))
b = property(fset=attrsetter('_b'))
c = property(fset=attrsetter('_c'))
def attrsetter(attr):
def set_any(self, value):
setattr(self, attr, value)
return set_any
a = property(fset=attrsetter('_a'))
b = property(fset=attrsetter('_b'))
c = property(fset=attrsetter('_c'))
-121--1742835- Ваш список специально не исключает CocoaPython/PyObjC , который был бы полностью встроен в Mac OS X. Он бы не работал ни на чем другом, хотя
-121--4028801-class...
def __setattr__(self, name, value):
print 'setting', name
self.__dict__[name] = value
Все.
Может быть, вы ищете
__ Setattr __ (я, имя, значение)
посмотрите здесь
Я вижу, что ваши загадки просто регистрируют сообщение, а затем просто назначают значение - на самом деле, ваш принятый ответ только назначает значение. Вы используете этот шаблон, потому что это принятая практика / обычная мудрость на некотором другом языке, возможно, то имя которого начинается с «J»? Если это так, тогда, пожалуйста, узнайте, что подход Pythonic к этому же дизайну - это гораздо проще:
class Of2010(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
Нет. Нет - ничего не настраивает, без промежуточных функций не требует, чтобы назначить значение. "Что ты говоришь? «Общественное воздействие переменных членов? !!» Ну, Да на самом деле.
Посмотрите на эти классы с точки зрения клиентского кода. Чтобы использовать ваш класс, клиенты создают объект, а затем назначьте свойство «A», используя:
obj = Of2010()
obj.a = 42
. Примечательно, это тот же код для 5-лайнера, который я разместил выше.
Почему J-language поощряет более просторно стиль свойств? Чтобы сохранить интерфейс класса в случае будущих изменений в требованиях. Если в какой-то момент времени некоторое время, какое-то другое значение объекта должно измениться в концерте с любыми изменениями в A, то необходимо внедрить механизм свойств. К сожалению, J-Language подвергает природу механизма доступа к атрибуту к Кодексу клиента, чтобы ввести свойство в какой-то момент в будущем, является задачей навязчивой рефакторизации, которая потребует восстановления всех клиентов, которые используют этот класс и его «атрибут».
В Python такой не тот случай. Доступ к атрибуту «A» объекта определяется во время выполнения в вызывающем абонете. Поскольку прямой доступ и доступ к имуществу как «смотреть» так же, ваш класс Python сохраняет этот интерфейс, даже если фактический механизм отличается. Что имеет значение то, что он идентичен, насколько касается клиентского кода.
Итак, в Java, один вводит эту сложность свойств справа от создания этого класса (и на самом деле, принимающей практикой все классов), о том, что он может стать необходимым день в будущем. С Python можно начать с реализации самой простой вещи, которая может работать, то есть прямой доступ к простым переменным участника, оставляя комплексный подход на время в будущем, что на самом деле требуется дополнительные вещи и значение. С того дня на самом деле не может прийти, это огромный прыжок вперед в получении этой первой рабочей версии вашего кода из двери.