面试题答案
一键面试陷阱一:方法返回值类型不匹配
在链式调用中,如果前一个方法返回的对象类型与后续方法所期望的对象类型不匹配,就会导致错误。
示例代码:
s = "123"
try:
result = s.upper().split().join("-")
# upper()返回字符串,split()返回列表,列表没有join方法
except AttributeError as e:
print(f"错误: {e}")
陷阱二:链式调用中的空值问题
如果链式调用中的某个方法返回 None
,后续的方法调用就会出错,因为 None
没有对应的方法。
示例代码:
def custom_split(s):
if s == "":
return None
return s.split()
s = ""
try:
result = custom_split(s).join("-")
# custom_split()返回None,None没有join方法
except AttributeError as e:
print(f"错误: {e}")
陷阱三:方法副作用影响链式调用结果
某些方法可能会有副作用,改变对象的内部状态,这可能会影响链式调用中后续方法的行为。
示例代码:
class CustomString:
def __init__(self, s):
self.s = s
def remove_char(self, char):
self.s = self.s.replace(char, "")
return self
def reverse(self):
self.s = self.s[::-1]
return self
cs = CustomString("hello")
try:
result = cs.remove_char('l').reverse().s
print(result)
# 先移除'l',再反转字符串
except AttributeError as e:
print(f"错误: {e}")
此例中,如果方法实现有误,可能导致链式调用结果不符合预期。