为何Python类方法中type(balance) != int这类判断无法生效?
问题分析与解决
问题根源:逻辑判断错误
你的前两段代码的问题完全出在逻辑判断上,和是否在类方法中执行没有关系。
1. 第一个版本的逻辑漏洞
原代码中的条件:
if type(balance) != int or type(balance) != float: return
这个条件永远为True:
- 如果输入是
int类型,type(balance) != float为True,or逻辑只要一个条件成立就返回True,直接触发return - 如果输入是
float类型,type(balance) != int为True,同样触发return
所以不管输入合法与否,都会直接退出方法,永远不会执行self._balance = balance,余额始终是默认的0。
2. 拆分后的两个if的逻辑问题
拆分后的代码:
if type(balance) != int: return if type(balance) != float: return
同样逻辑错误:
- 输入是
float时,第一个if条件成立(float != int),直接return - 输入是
int时,第一个if不触发,但第二个if条件成立(int != float),还是return
最终还是永远到不了赋值步骤,余额保持默认值。
3. 第三个版本能正常工作的原因
if type(balance) not in [int, float]: return
这个条件只有当输入类型既不是int也不是float时才会触发return,完全符合你的需求:只要是int或float类型,就会跳过这个判断,继续执行后续的余额范围检查和赋值操作。
关于你之前的while type(num) != int:能正常工作的原因
那个逻辑是判断单一类型:只要num不是int就循环,逻辑本身是成立的。但这里你需要判断的是属于int或float其中一种,逻辑场景完全不同,不能直接套用单一类型的判断方式。
内容的提问来源于stack exchange,提问作者Kelli
相关产品推荐
相关产品推荐

