None变量能否调用方法?Python代码var_pg返回值与fitness不符问题
1. 值为None的变量能否调用对应方法
不能。None是Python中的空值对象,属于独立的NoneType类型,不携带任何自定义类的属性或方法。如果尝试用值为None的变量调用自定义方法,会直接抛出AttributeError异常。
2. 代码运行结果不符合预期的原因
你的代码一共存在3处核心错误,共同导致输出为0:
- pop集合中存储的是int类型的整数,你定义的
CP类从未被实例化使用,int类型本身没有fitness方法,本身就不满足你想要的计算逻辑 find_best函数中return语句缩进错误,被放在了for循环内部,第一次循环执行完成后就会直接返回结果,循环只会执行1次,取到的第一个元素就是0- 第一次循环判断
if (not var_pg) or (var_pg.fitness()>p.fitness())时,var_pg为None,not var_pg结果为True,or逻辑会触发短路,后面的var_pg.fitness()判断根本不会执行,所以没有触发属性报错,直接把第一个元素0赋值给var_pg后就返回了
修正后的参考代码
class CP: def __init__(self, value): self.value = value def fitness(self): # 可根据需求调整fitness计算逻辑,此处保留原有公式新增value区分不同实例 c = 0.1*(5/41) + self.value self.__fitness = c return self.__fitness def find_best(pop): var_pg = None for p in pop: if (not var_pg) or (var_pg.fitness() > p.fitness()): var_pg = p # return调整到for循环外,遍历全部元素后再返回最优结果 return var_pg def main(): # pop存储CP类实例而非整数 pop = [CP(0), CP(1), CP(2), CP(3), CP(4), CP(5)] var_pg = find_best(pop) print('value of var_pg', var_pg.value) print('fitness of var_pg', var_pg.fitness()) main()
内容的提问来源于stack exchange,提问作者Arun Kumar Dey
相关产品推荐
相关产品推荐

