You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:30:02