将类属性作为Python中该类函数的参数传递

时间:2017-01-23 17:10:22

标签: python python-2.7

正如标题所示,我试图将我的类的属性作为同一类函数的参数传递。在下面的示例中,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

3 个答案:

答案 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