Python类内方法互相调用时self.all()返回None问题排查
问题成因
self.all()执行结果为None是Python方法返回值规则导致的:
- 你定义的
num1、num2、num3三个方法内部只执行了print操作,没有返回任何值 all()方法内部仅随机选择方法执行,自身没有写return语句,Python中无显式返回值的方法,默认返回值就是None
现有代码还存在执行顺序错位问题:运行时会先打印选中的One/Two/Three,再打印i choose: None,本质是子方法提前执行了打印,值没有回传给上层调用逻辑。
修正方案
把需要输出的内容通过return向上返回,不在子方法中直接打印,调整后可正常运行:
import random class now: def __init__(self, name): self.name = name def get_name(self): return self.name def num1(self): return 'One' def num2(self): return 'Two' def num3(self): return 'Three' def all(self): num = [self.num1, self.num2, self.num3] return random.choice(num)() def start(self): print('my name is: ', self.name) print('i choose:', self.all()) my_take = now('king') my_take.start()
调整点说明:
- 三个num方法不再直接打印文本,改为将对应文本作为返回值返回
all()方法执行随机选中的方法后,将拿到的结果返回给调用方- 最终
start()调用self.all()时可以拿到实际选中的文本值,不会再打印None,输出顺序也符合预期
内容的提问来源于stack exchange,提问作者chibuike ogodo
相关产品推荐
相关产品推荐

