简体   繁体   English

将 object 动态传递给 class 方法

[英]Passing object into class method dynamically

I am trying to pass in an object so that it will be modified by the method defined infection .我正在尝试传入 object 以便通过方法定义的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.任何帮助深表感谢。

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 Infection() 更改 class 属性案例并在每个循环中打印

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:这是因为 return 会立即终止 function 的运行,所以在 function 中没有 while 循环,而是在您的主要区域中,如下所示:

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

while population > cases:
    infection(pass all parameters)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM