Passing object into class method dynamically

Viewed 47

I am trying to pass in an object so that it will be modified by the method defined infection. However, when I do pass it in, as I show below, it only does it once. This is my first experience making dynamic objects, so I'm not quite sure how to get it to keep going.

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
        print(name, cases)       

    def infection(self, name, population, cases):
        while population > cases:
            cases = cases + 1
            return (cases)        
    
westernEurope = Region("Western Europe", 1000000, 0, 0)
print(westernEurope.infection("Western Europe", 1000000, 0))

What I want to happen is that the infection method should keep incrementing until it reaches the number of cases, but I also need to be able to print each incrementation. Any help is much appreciated.

3 Answers

You have an indentation problem with your code.

This should work for your requirement:

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
        print(name, cases)       

    def infection(self, name, population, cases):
        while population > cases:
            cases = cases + 1
            print(cases)
        return (cases)        
    
westernEurope = Region("Western Europe", 1000000, 0, 0)
print(westernEurope.infection("Western Europe", 1000000, 0))

Infection() changes class attribute cases and prints it at each loop

class Region:
    def __init__(self, name, population, cases, deaths):
        self.name = name
        self.population = population
        self.cases = cases
        self.deaths = deaths
    
    def infection(self):
        while self.population > self.cases:
            self.cases += 1
            print(self.name, self.cases)        
    
westernEurope = Region("Western Europe", 100, 0, 0)
westernEurope.infection()

It is because return immediately terminates the running of the function, so don't have the while loop in the function but in your main area, like this:

def infection(self, name, population, cases):
    cases = cases + 1

while population > cases:
    infection(pass all parameters)
Related