Python类中如何为属性设置依赖外部函数的默认值?
简洁实现方案
首先你当前的try-except写法存在问题:__init__的string参数没有设置默认值,调用时如果不传参数会直接抛出TypeError,根本走不到方法内部的try逻辑里。另外,初始的self.score = -1确实多余,except里改成pass是可行的——因为如果len(string)执行失败,self.score会保留初始的-1,但这不是最优写法。
给你几种更简洁的实现方式:
方式一:参数默认值+条件表达式(最符合需求)
直接给string参数设置None作为默认值,用条件表达式判断赋值:
class Puzzle: def __init__(self, string=None): self.score = len(string) if string is not None else -1
- 调用时传入字符串(包括空字符串
""),score会取对应长度; - 不传参数时,
string为None,score默认设为-1。
方式二:处理非字符串类型的输入(可选)
如果需要兼容传入非可迭代类型(比如数字)的情况,避免len()报错,可以用try-except但精准捕获异常:
class Puzzle: def __init__(self, string=None): try: self.score = len(string) if string is not None else -1 except TypeError: # 传入的参数没有len()方法时,用默认值 self.score = -1
补充说明
你之前尝试的len(string) || -1是其他语言的语法,Python里逻辑或用or,但不能直接这么用——比如如果传入空字符串"",len("")是0,0 or -1会得到-1,不符合“传入字符串就取长度”的需求,所以条件表达式是更准确的选择。
内容的提问来源于stack exchange,提问作者icedwater
相关产品推荐
相关产品推荐

