在Python中将class属性作为该类函数的参数传递
正如标题所示,我试图将类的属性作为同一类的函数的参数传递。在下面的示例中,在Python中将class属性作为该类函数的参数传递,python,python-2.7,Python,Python 2.7,正如标题所示,我试图将类的属性作为同一类的函数的参数传递。在下面的示例中,print\u top\n()的功能默认为打印self.topn,但如果需要,也可以使用不同的值调用该函数。这是Python(或通用编程)的犯规还是有办法做到这一点 >>> class Example(): def __init__(self, topn=5): self.topn = topn def print_top_n(self, n=self.topn):
print\u 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
>>类示例()
定义初始化(self,topn=5):
self.topn=topn
def print_top_n(self,n=self.topn):
印刷品
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
类示例():
例如,文件“”,第4行
def print_top_n(self,n=self.topn):
NameError:未定义名称“self”
否;默认值是在定义函数时计算的,因此没有要对其执行属性访问的对象。您可以使用sentinel值:
def print_top_n(self, n=None):
if n is None:
n = self.topn
print n
一个选项是使用标记对象。这是一种比
n=None
更好的模式(取决于api的实际意图),因为即使有人故意通过n=None
,它也会工作
marker = object()
class Example:
def __init__(self, topn=5):
self.topn = topn
def print_top_n(self, n=marker):
if n is marker:
n = self.topn
print(n)
这些方法是在创建类时创建的,默认值是在创建方法时设置的(请参见此)——调用函数时不会重新求值。换句话说,这一切都发生在
self
创建之前很久(因此出现namererror
)
典型的方法是使用sentinel值,您可以在print\u top\n
中检查该值(最常见的是None
)
def print_top_n(self, n=None):
n = self.topn if n is None else n
print n