面向对象编程:Python类PlugLead的encode方法IF语句未生效问题
问题原因与解决方案
核心问题根源
你的if分支未触发是Python的比较运算符链式计算规则导致的,属于语法理解偏差问题,并非if语句本身故障:
- 在Python中,
==和is都属于比较运算符,二者优先级相同,连续书写时会触发链式比较逻辑 - 你写的
self.map1 == character is True会被解释器自动等价解析为:(self.map1 == character) and (character is True) - 你的场景中
character是字符串'z',显然'z' is True的结果为False,因此整个条件表达式的最终结果为False,自然不会进入对应if分支。
修复方案
最符合Python编码规范的写法是直接去掉多余的is True判断,因为self.map1 == character本身就是布尔值,可以直接作为条件使用:
class PlugLead: def __init__(self, mapping): self.map1 = mapping[0] self.map2 = mapping[1] def encode(self, character): if self.map1 == character: return self.map2 elif self.map2 == character: return self.map1 else: return character lead = PlugLead("zc") print(lead.encode("z")) # 修正后会正确输出 c
如果确实需要显式判断布尔值,也可以给比较运算加括号明确优先级:if (self.map1 == character) is True:,但该写法冗余,不推荐使用。
内容的提问来源于stack exchange,提问作者Cat
相关产品推荐
相关产品推荐

