正如标题所示,我试图将我的类的属性作为同一类函数的参数传递。在下面的示例中,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
答案 0 :(得分:3)
一种选择是使用标记对象。这是一个比if ( indexPath.row >= 2 ) {
cell.userInteractionEnabled = false
cell.contentView.alpha = 0.5
}
else{
cell.userInteractionEnabled = true
cell.contentView.alpha = 1
}
更好的模式(取决于您的api的实际意图),因为即使有人故意通过n=None
,它也会有效。
n=None
答案 1 :(得分:3)
创建类时会创建方法,并且在创建方法时会设置默认值(请参阅此question/answer) - 调用函数时不会重新评估它们。换句话说,这一切都发生在创建self
之前很久(因此NameError
)。
典型的方法是使用您可以在print_top_n
内查看的标记值(None
是最常见的)。
def print_top_n(self, n=None):
n = self.topn if n is None else n
print n
答案 2 :(得分:0)
没有;定义函数时会计算默认值,因此 尚未执行属性访问的对象。您使用的是sentinel值:
def print_top_n(self, n=None):
if n is None:
n = self.topn
print n