Search code examples
pythonself

Is it possible to use self.value as default argument in method?


I would like to use element defined in class __init__ as default argument of some other method. Here is my code:

class Main():
    def __init__(self):
        self.value = 3

    def print_element(self, element=self.value):
        print(element)

main = Main()
main.print_element()

It generates error:

Traceback (most recent call last):
  File "so.py", line 1, in <module>
    class Main():
  File "so.py", line 5, in Main
    def print_element(self, element=self.value):
NameError: name 'self' is not defined

Solution

  • I don't believe you can use an instance attribute value as a default. You can work around it by defaulting to None, then doing the rest inside the function:

    def print_element(self, element=None):
        if element is None:
            element = self.value