Ваш метод add_one возвращает None, потому что в нем отсутствует оператор return. Когда функция python не содержит оператора возврата, ее возвращаемое значение по умолчанию равно None:
def add_one(self, value):
self._return_function(value+1)
Это должно быть:
def add_one(self, value):
return self._return_function(value+1)
Если честно, у меня нетУкажите, какую проблему пытается решить ваш класс. Возможно, небольшое объяснение этой цели приведет к ответам, которые предложат более эффективные способы ее достижения.
(Правка: я предполагаю, что отрицательное значение относится к приведенному выше абзацу, поэтому я остановлюсь на нем подробнее)немного)
Кажется, что ваш класс может быть так же легко написан другими способами, которые, возможно, чище. Я особенно не думаю, что это хорошая идея, чтобы add_one
выполнял две разные функции в зависимости от флага, который вы передаете во время создания объекта. Это обязательно приведет вас к ситуации с трудно исправляемой ошибкой.
Подумайте:
>>> foobar = foo()
>>> barfoo = foo(True)
>>> x = foobar.add_one(5)
>>> y = barfoo.add_one(5)
>>> x
6
>>> y # y is None!
>>>
Просто взглянув на два одинаково выглядящих вызова на add_one
, невозможно решить, какой из них вернет целое значение, а какой - None. Это затрудняет рассуждение о вашей программе.
То же самое касается атрибута stored_value
для объектов класса foo
- вы не можете знать, когда пишете методы класса, будет ли этот атрибут вообще существоватьпотому что это зависит от флага, который вы передаете во время выполнения, поэтому вам придется загромождать код вашего метода тестами, чтобы убедиться, что вы не вызываете AttributeError
.