0

0

Python中如何正确初始化单个或多个对象实例(含构造函数与列表批量创建)

心靈之曲

心靈之曲

发布时间:2026-03-03 09:35:00

|

299人浏览过

|

来源于php中文网

原创

Python中如何正确初始化单个或多个对象实例(含构造函数与列表批量创建)

本文详解python中使用构造函数初始化单个对象及批量创建对象列表的正确方法,重点纠正extend()误用、super()滥用、__str__实现缺陷等常见错误,并提供可运行的完整示例。

本文详解python中使用构造函数初始化单个对象及批量创建对象列表的正确方法,重点纠正extend()误用、super()滥用、__str__实现缺陷等常见错误,并提供可运行的完整示例。

在Python面向对象编程中,正确初始化对象是基础但易错的关键环节。尤其当需要批量创建一组同类实例(如10个银行账户)时,开发者常因混淆append()与extend()、误用继承关系或构造逻辑错误,导致TypeError: 'Account' object is not iterable等运行时异常。以下将从单对象初始化对象列表批量构建最佳实践总结三方面展开说明。

✅ 正确初始化单个对象

Account类已定义标准三参数构造函数,初始化语法简洁明确:

acc = Account("DE44500105170000000000", "KASH", 100.0)

⚠️ 注意:原代码中createAccount()方法设计存在严重逻辑问题——它试图在已有实例上调用构造逻辑,且参数顺序错误(应为IBAN, name, balance,却传入name, name, balance),该方法完全冗余,应直接删除。构造对象只需调用Account(...)即可。

✅ 批量创建对象列表(核心修正)

原TestAccount类存在多个关键错误:

立即学习Python免费学习笔记(深入)”;

  • ❌ 错误使用super().__init__():TestAccount继承自Account,但自身并不需要Account的实例属性(如__balance),继承关系不合理;更合适的设计是组合(Composition)而非继承(Inheritance)
  • ❌ self.accounts.extend(Account):extend()要求传入可迭代对象(如列表、元组),而Account(...)返回的是单个Account实例(不可迭代),导致报错。✅ 正确做法是使用append()添加单个对象。
  • ❌ __str__方法返回元组而非字符串:导致打印时显示格式混乱,应返回str类型。

以下是重构后的专业写法(推荐使用独立测试类,避免不必要继承):

LeiaPix
LeiaPix

一款免费的2D图片转3D动画的AI图片处理工具

下载
# Account.py
class Account:
    def __init__(self, account_number_IBAN: str, account_holder_name: str, balance: float = 0.0):
        self.__account_holder_name = account_holder_name
        self.__account_number_IBAN = account_number_IBAN
        self.__balance = balance

    # Getter methods (using properties is more Pythonic, but kept as methods per original)
    def get_AccountHolder_Name(self):
        return self.__account_holder_name

    def get_AccountHolder_IBAN(self):
        return self.__account_number_IBAN

    def get_Balance(self):
        return self.__balance

    def deposit(self, amount: float):
        if amount > 0:
            self.__balance += amount
        else:
            print("Deposit amount must be greater than 0")

    def withdraw(self, amount: float):
        if amount <= 0:
            print("Withdrawal amount must be greater than 0")
        elif amount > self.__balance:
            print("Insufficient balance for withdrawal")
        else:
            self.__balance -= amount

    def __str__(self):
        return (f"Account Holder Name: {self.__account_holder_name}\n"
                f"Account IBAN: {self.__account_number_IBAN}\n"
                f"Account Balance: {self.__balance:.2f}")
# test_accounts.py
from Account import Account

def create_test_accounts() -> list[Account]:
    """批量创建10个测试账户,返回Account对象列表"""
    ibans = [
        "DE44500105170000000000", "GB29NWBK60161331926819", "FR1420041010050500013M02606",
        "IT60X0542811101000000123456", "ES9121000418450200051332", "NL91ABNA0417164300",
        "BE62510007547061", "CH9300762011623852957", "AT483200000012345864", "PL61109010140000071219812874"
    ]
    names = ["KASH", "ARRAIN", "ZAHEER", "AMJAD", "JOHN", "SURESH", "SAIIN", "CHAUDHARAIN", "SARDAR", "BLOSSOM"]
    balances = [0.0, 100.0, 23.5, 555.75, 10000.0, 0.0, 99.99, 342.10, 0.0, 2131.42]

    accounts = []
    for i in range(10):
        acc = Account(ibans[i], names[i], balances[i])
        accounts.append(acc)  # ✅ 关键:使用 append() 添加单个对象
    return accounts

# 使用示例
if __name__ == "__main__":
    accounts = create_test_accounts()

    print(f"Successfully created {len(accounts)} accounts:\n")
    for idx, acc in enumerate(accounts, 1):
        print(f"--- Account {idx} ---")
        print(acc)  # 自动调用 __str__
        print()

⚠️ 关键注意事项与总结

  • append() vs extend()

    • list.append(item) → 添加单个元素(任何类型均可);
    • list.extend(iterable) → 将可迭代对象中的每个元素逐个添加到列表。
      混淆二者是本例报错的直接原因。
  • 避免无意义继承:TestAccount无需继承Account,它只是账户的“使用者”或“管理者”,应采用组合模式(即持有Account列表),而非继承。继承应体现“is-a”关系(如SavingsAccount is an Account),而非“has-a”。

  • __str__必须返回字符串:原实现返回元组,会导致print(acc)输出异常;务必用f-string或str.format()拼接并返回str。

  • 类型提示增强可读性:为__init__参数和返回值添加类型注解(如str, float, list[Account]),提升代码健壮性与IDE支持。

  • 构造即完成:Python中对象初始化由__init__一次性完成,无需额外createAccount()工厂方法——除非有复杂初始化逻辑(如从JSON/DB加载),否则纯属冗余。

掌握以上要点,即可安全、高效地初始化任意数量的对象实例,并构建清晰、可维护的面向对象程序结构。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

326

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

17

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

593

2024.04.28

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号