class makeCode:
def __init__(self,code):
self.codeSegment = code.upper()
if checkSegment(self.codeSegment):
quit()
self.info=checkXNA(self.codeSegment)
def echo(self,start=0,stop=len(self.codeSegment),search=None): #--> self not defined
pass
不工作......
checkSegment
返回1; checkXNA
分配信息(如果它是RNA或DNA),它返回一个包含信息“dnaSegment”或“rnaSegment”的字符串;工作得很好。 但是,设计用于打印更具体信息的函数echo
告诉我自己没有定义,但为什么?
答案 0 :(得分:5)
self
未在函数定义时定义,您不能使用它来创建默认参数。
在创建函数时评估函数定义中的表达式,而不是在调用它时,请参阅"Least Astonishment" and the Mutable Default Argument。
请改用以下技术:
def echo(self, start=0, stop=None, search=None):
if stop is None:
stop = len(self.codeSegment)
如果您需要支持None
作为stop
的可能值(例如,None
是stop
的有效值,如果明确指定的话),则需要选择一个不同的独特哨兵使用:
_sentinel = object()
class makeCode:
def echo(self, start=0, stop=_sentinel, search=None):
if stop is _sentinel:
stop = len(self.codeSegment)
答案 1 :(得分:5)
在计算函数或方法定义时,即在解析类时,将计算默认参数值。
编写依赖于对象状态的默认参数值的方法是使用None
作为标记:
def echo(self,start=0,stop=None,search=None):
if stop is None:
stop = len(self.codeSegment)
pass