1
votes

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

1
"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, if you really wanted to. I would suggest just using the language constructs as they were intended, though. - juanpa.arrivillaga

1 Answers

4
votes

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