我有一些带有一些计算一些数量的函数的类。全局布尔值控制函数是否应该返回值或将其存储为属性。我想要一个单独的_return_value()
函数来完成此任务,而不是在每个类函数中都编写if store_value … else return …
。简单的_return_value = return
给出语法错误。这是一个最小的(不是)工作示例:
class foo(object):
def __init__(self, store_value=False):
if store_value:
self._return_function = self._store_value
else:
self._return_function = self._return_value
def _return_value(self, value):
return value
def _store_value(self, value):
setattr(self, 'stored_value', value)
def add_one(self, value):
self._return_function(value+1)
它非常适合将值存储为类属性,即
objFoo = foo(store_value=True)
objFoo.add_one(41)
print(objFoo.stored_value) # prints '42'
但是当我使用add_one()
函数时会返回None
objFoo2 = foo(store_value=False)
print(objFoo2.add_one(41)) # expect to return '42', but returns 'None'
我如何管理_return_value()
始终返回值',使add_one()
在这种情况下返回42?
让add_one
转发_return_function
的返回值。
def add_one(self, value):
return self._return_function(value+1)
_return_function
设置为_store_value
,则add_one
将返回None
。_return_function
设置为_return_value
,则add_one
将转发返回的值。您的add_one方法返回None,因为它缺少return语句。当python函数不包含return语句时,其默认返回值为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。这使得很难对您的程序进行推理。