2

I have something like this:

class updateMyNumber:
    def __init__(self, number):
        self.number = update_number(number)

    def update_number(self, number):
        self.number = number * 2

inst = updateMyNumber(5)

I get the following error:

NameErrorTraceback (most recent call last) in () ----> 1 inst = updateMyNumber(5)

in init(self, number) 1 class updateMyNumber: 2 def init(self, number): ----> 3 self.number = update_number(number) 4 5 def update_number(self, number):

NameError: name 'update_number' is not defined

I want the inst to return 25. What's the best way to define the class?

Note: I don't want to write self.number = number * 2

A1122
  • 1,324
  • 3
  • 15
  • 35
  • "Note: I don't want to write self.number = number * 2" Then use another language. The explicit `self` is here to stay in Python. I suppose you could refactor all your code to use closures and nested scopes [for simulating classes](http://code.activestate.com/recipes/578091-simple-tool-for-simulating-classes-using-closures-/), if you really wanted to. I would suggest just using the language constructs as they were intended, though. – juanpa.arrivillaga Jul 31 '18 at 07:51

1 Answers1

6

you should call the self method:

class updateMyNumber:
    def __init__(self, number):
        self.update_number(number)

    def update_number(self, number):
        self.number = number * 2

but better way to setting instance variables inside __init__, read the should-all-member-variables-be-initialized-in-init

so i recomend you, something:

class updateMyNumber:
    def __init__(self, number):
        self.number = self.update_number(number)

    def update_number(self, number):
        return number * 2
Brown Bear
  • 19,655
  • 10
  • 58
  • 76