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

Python中如何初始化自定义类类型的默认空列表成员变量

错误原因

  • MyClass构造方法内的my_strings未加self.前缀,属于局部变量,没有绑定到实例对象上,因此实例的my_strings成员还是初始定义的None
  • List[MyBaseClass]是类型注解语法,仅用于标注变量的类型约束,不会实际生成列表实例,需要手动调用[]或list()创建空列表
  • 原代码中MyClass没有定义append方法,直接调用会触发属性不存在的错误

正确实现代码

首先引入类型标注依赖,修正类定义:

from typing import List

class MyBaseClass(object):
    string_a: str
    string_b: str

    def __init__(self):
        self.string_a = str()
        self.string_b = str()

class MyClass(object):
    # 类型标注:my_strings是元素为MyBaseClass类型的列表
    my_strings: List[MyBaseClass]

    def __init__(self):
        # 实例化空列表,绑定到实例成员
        self.my_strings = []
    
    # 实现追加方法,接收字符串参数构造MyBaseClass实例后加入列表
    def append(self, a: str, b: str) -> None:
        new_item = MyBaseClass()
        new_item.string_a = a
        new_item.string_b = b
        self.my_strings.append(new_item)

验证运行

my_class = MyClass()
# 此时my_class.my_strings为长度为0的空列表,不会触发None错误
my_class.append("hello", "world")
# 输出验证结果
print(len(my_class.my_strings)) # 输出1
print(my_class.my_strings[0].string_a) # 输出hello

优化建议

可以给MyBaseClass的构造方法增加初始化参数,简化赋值逻辑:

class MyBaseClass(object):
    def __init__(self, a: str = "", b: str = ""):
        self.string_a = a
        self.string_b = b

对应的append方法可以简化为:

def append(self, a: str, b: str) -> None:
    self.my_strings.append(MyBaseClass(a, b))

内容的提问来源于stack exchange,提问作者cdub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:07