正如标题所示,我试图将类的属性作为同一类函数的参数传递。在下面的示例中,print_top_n()
的功能默认是打印self.topn
,但如果需要,也可以使用不同的值调用该函数。这是Python(或通用编程)犯规,还是有办法做到这一点?在
>>> class Example():
def __init__(self, topn=5):
self.topn = topn
def print_top_n(self, n=self.topn):
print n
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
class Example():
File "<pyshell#7>", line 4, in Example
def print_top_n(self, n=self.topn):
NameError: name 'self' is not defined
一种选择是使用标记对象。这是一个比
n=None
(取决于api的实际意图)更好的模式,因为即使有人故意传递n=None
,它也能工作。在否;定义函数时会计算默认值,因此没有对象需要对其执行属性访问。而是使用sentinel值:
方法是在创建类时创建的,而默认值是在创建方法时设置的(请参见question/answer),在调用函数时不会重新评估它们。换句话说,这一切都发生在
self
创建之前(因此NameError
)。在典型的方法是使用一个sentinel值,您可以在
print_top_n
内部进行检查(None
是最常见的)。在相关问题 更多 >
编程相关推荐