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
Not working...
checkSegment
returns 1 if the input was not a string made of nucleotids letter, or if that contains nucleotids that can't be together;checkXNA
that returns a string with the information "dnaSegment" or "rnaSegment"; works perfectly. But then the function echo
which will be designed for printing more specific information tells me that self is not defined, but why?
self
is not defined at function definition time, you cannot use it to create a default argument.
Expressions in a function definition are evaluated when the function is created, not when it is being called, see "Least Astonishment" and the Mutable Default Argument.
Use the following technique instead:
def echo(self, start=0, stop=None, search=None):
if stop is None:
stop = len(self.codeSegment)
If you need to support None
as a possible value for stop
(e.g. None
is a valid value for stop
if specified explicitly), you'll need to pick a different unique sentinel to use:
_sentinel = object()
class makeCode:
def echo(self, start=0, stop=_sentinel, search=None):
if stop is _sentinel:
stop = len(self.codeSegment)
A default parameter value is evaluated when the function or method definition is evaluated, i.e. when the class is parsed.
The way to write default parameter values that depend on object state is to use None
as a sentinel:
def echo(self,start=0,stop=None,search=None):
if stop is None:
stop = len(self.codeSegment)
pass
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With