python类似于java的重写toString方法

本文深入探讨了Python类中的__str__方法,通过一个具体的people类实例,展示了如何重写__str__方法来定制类实例的字符串表示形式。文章通过创建people类的对象并打印,展示了重写后的__str__方法如何工作,返回了定制化的字符串格式。
部署运行你感兴趣的模型镜像

python类中的特殊方法: __str__(self)用来重写

people类:

class People:
    '所有员工的基类'

    #构造函数
    def __init__(self, user_id, user_name):
        self.user_id = user_id
        self.user_name = user_name

    #析构函数
    def __del__(self):
        class_name = self.__class__.__name__
        print(class_name, '销毁')
    def get_info(self):
        print("people: ", "name = ," + self.user_name, "id = ", self.user_id)
    def __str__(self):
        return "people\n user_id: %d \t user_name: %s "%(self.user_id, self.user_name)

测试类:

from People import People
p1 = People(1, 'alan')
p2 = People(2, 'dream')
p3 = People(3, 'zuora')
people_list = [p1, p2, p3]
for people in people_list:
    print(people)

输出:

people
 user_id: 1 	 user_name: alan 
people
 user_id: 2 	 user_name: dream 
people
 user_id: 3 	 user_name: zuora 
People 销毁
People 销毁
People 销毁

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>首先,用户的问题是关于Java中Arrays类的asList方法的解释和用法。我需要根据系统级指令来回答。**系统级指令回顾:**-行内数学表达式用$...$,但这里可能不需要数学表达式。-独立公式用$$...$$,这里可能不适用。-LaTeX语法正确:确保代码块和格式正确。-使用中文回答:所有回答都用中文。-生成相关问题:在回答末尾添加相关问题。-引用标识:引用的段落末尾自然添加引用标识如[^1]。用户参考了几个站内引用:-引用[1]:解释asList方法,转换数组为list,但不能add元素。-引用[2]:类似解释,示例代码显示添加元素导致UnsupportedOperationException。-引用[3]:强调返回固定大小的列表,更改会“直写”到数组。用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”用户上一次的问题是我之前的回应?在对话历史中,我的最后一个回应是系统级指令的示例(关于快速排序),但用户是新的查询。对话历史:-第一轮:系统级指令。-我的回应:快速排序示例。-现在用户的问题是关于Arrays.asList。用户说“用户上一次的问题”,但在这个对话流中,用户的第一条消息是新的查询。可能用户指的是当前对话的上下文,或者是之前的。检查对话历史:-用户发来了关于Arrays.asList的查询,参考了三个引用。为了“尽可能多的参考用户上一次的问题和你的回答”,用户上一次问题是我在这个对话流中回答的?在对话历史中,用户之前没有其他问题;这是我的第一条回应是针对系统指令的示例。可能用户指的是在这个查询中提供的引用。重读用户消息:“上述引用仅供参考,并不是用户真正的需求”,用户真正的需求是:“我想了解Java中Arrays类的asList方法的解释和用法请问JavaArraysasList方法详解及示例”。所以,我需要基于用户提供的引用来解释,但确保回答核心需求。**结构化回答:**-用户要求“详解及示例”,所以需要清晰解释和代码示例。-解释:什么是asList方法、用法、注意事项(如不能add元素)。-根据引用,重点:返回一个固定大小的列表,不支持添加或删除操作。-使用中文。**回答结构:**1.**介绍方法**:简要说明Arrays.asList的作用。2.**用法解释**:如何用、返回值类型。3.**注意事项**:基于引用,讨论为什么不支持add、什么操作支持。4.**示例代码**:展示基本用法和错误场景。5.**总结建议**:何时使用、避免什么。6.**相关问题**:按指令生成相关问题。**生成相关问题:**-相关于asList的深层问题,如替代方法、优化、应用场景。-例如:如何创建一个可变的列表?asList与ArrayList的区别?在哪些场景下使用asList合适?**引用处理:**-在回答中自然地添加引用标识,例如当提到不能add时引用[^1]和[^2]。**代码块:**-在回答中包含代码块时,使用正确的格式,如示例中的```python```,但这里是Java,所以用```java```。最终回答大纲:1.开头:解释asList方法。2.主要内容:解释细节,带代码。3.注意事项。4.示例失败场景。5.结尾建议。6.相关问题。</think> ### Java Arrays.asList() 方法详解及示例 在 Java 中,`Arrays.asList()` 方法是 `java.util.Arrays` 类的一个静态方法,用于将一个数组转换成一个固定大小的 `List`。它主要用于简化数组与集合框架之间的转换,常见于初始化列表或处理 API 需求时[^3]。然而,由于返回的列表是“固定大小”的,某些操作如添加或删除元素可能导致异常,需特别注意[^1][^2]。下面我将一步步解释其用法、原理和注意事项,并提供完整的代码示例。 #### 1. **方法原理和基本用法** - **作用**: `Arrays.asList()` 接收一个数组(或可变参数)作为输入,返回一个 `List` 对象,该列表由原始数组支持。这意味着对列表的更改(如元素修改)会直接反映到原始数组中,反之亦然。 - **返回值类型**: 返回的是 `java.util.List` 接口的实现,但底层是一个 `Arrays$ArrayList`(非标准 `java.util.ArrayList`)。它是一个视图(view),而非独立的列表对象。 - **语法**: ```java List<T> list = Arrays.asList(T... a); ``` 其中 `T` 是数组元素的类型,`a` 是输入数组或可变参数。 - **优点**: 快速实现数组到列表的转换,代码简洁。 - **缺点**: 列表大小固定,不支持 `add()` 或 `remove()` 等方法,否则会抛出 `UnsupportedOperationException`[^1][^2]。 #### 2. **详细解释** - **固定大小限制**: 返回的列表是“固定大小”的(fixed-size)。这是因为底层实现使用了一个私有类 `Arrays$ArrayList`,它重写了 `add()`、`remove()` 等方法,直接抛出异常。这源于列表是基于原数组的视图,任何改变大小的操作都可能破坏数组结构[^3][^2]。 - **数据共享**: 列表和原始数组共享同一个数据存储。修改列表中的元素会直接改变原数组,这是一种“直写”(write-through)行为。例如: ```java String[] array = {"apple", "banana"}; List<String> list = Arrays.asList(array); list.set(0, "orange"); // 修改列表元素 System.out.println(array[0]); // 输出: orange,原数组也被修改 ``` - **支持的操作**: 仅支持不会改变大小的操作,如: - `get(index)`: 获取元素。 - `set(index, element)`: 修改元素。 - `size()`: 返回大小。 - `contains(element)`: 检查是否存在。 这些操作直接对应数组索引,效率高。 - **不支持的操作**: `add()`, `remove()`, `clear()` 等改变大小的操作会导致 `UnsupportedOperationException`[^2]。 #### 3. **完整示例代码** 以下示例演示了正确用法和常见错误场景。注意代码中的注释解释细节。 ```java import java.util.Arrays; import java.util.List; public class ArraysAsListDemo { public static void main(String[] args) { // 示例 1: 基本用法 - 转换数组为列表 String[] fruits = {"apple", "banana", "cherry"}; List<String> fruitList = Arrays.asList(fruits); System.out.println("原始列表: " + fruitList); // 输出: [apple, banana, cherry] // 示例 2: 修改元素(支持,因为不改变大小) fruitList.set(1, "blueberry"); System.out.println("修改后列表: " + fruitList); // 输出: [apple, blueberry, cherry] System.out.println("原始数组: " + Arrays.toString(fruits)); // 输出: [apple, blueberry, cherry],原数组同步修改 // 示例 3: 添加元素(不支持,抛出异常) try { fruitList.add("date"); // 尝试添加元素 } catch (Exception e) { System.out.println("添加元素错误: " + e); // 输出: UnsupportedOperationException } // 示例 4: 使用可变参数初始化 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); System.out.println("数字列表: " + numbers); } } ``` 在这个示例中: - `Arrays.asList(fruits)` 将字符串数组转换为列表。 - 正确使用了 `set()` 修改元素,同时检查了原数组的同步变化。 - 尝试 `add()` 时捕获并打印了 `UnsupportedOperationException`,这是常见错误点。 #### 4. **使用注意事项和最佳实践** - **适用场景**: - 快速创建只读列表或初始化集合。 - 用于方法参数需要 `List` 类型,但输入是数组时。 - 注意:适合操作频繁读取或修改现有元素的场景,不适合动态大小变化的场景[^3][^1]。 - **常见问题**: - **不可变大小**: 如果需要添加或删除元素,避免直接使用 `Arrays.asList()` 返回的列表。替代方案是创建一个新的 `ArrayList`: ```java List<String> mutableList = new ArrayList<>(Arrays.asList("a", "b", "c")); // 可安全 add/remove ``` - **原始类型数组问题**: 如果输入是基本类型数组(如 `int[]`),`Arrays.asList()` 会将其视为单元素列表,因为泛型不支持基本类型。需使用包装类型: ```java int[] intArray = {1, 2, 3}; List<int[]> wrongList = Arrays.asList(intArray); // 错误,列表大小是 1 List<Integer> correctList = Arrays.asList(1, 2, 3); // 正确,使用 Integer 可变参数 ``` - **性能考量**: 转换操作的时间复杂度是 $O(1)$,因为它不复制数据。但由于固定大小限制,在需要变长列表时,效率不如 `ArrayList`。 - **建议**: 在多数情况下,`Arrays.asList()` 适用于临时只读视图。如果需要可变列表,优先使用 `new ArrayList<>(Arrays.asList(...))` 作为标准做法[^2][^3]。 #### 5. **总结** `Arrays.asList()` 是 Java 中高效连接数组和集合的桥梁,通过返回固定大小列表简化代码。它支持元素修改但不支持增减操作,使用时应谨记其限制。正确使用时(如只读场景),它可以提高代码可读性和性能;错误使用时(如添加元素),容易引发异常。参考实际应用案例:在处理数据库查询结果或配置数组时,它常用于初始化不可变列表[^1]。 如果您有更多特定场景的问题,欢迎继续询问! ### 相关问题 1. 如何安全地创建一个可变列表来替代 `Arrays.asList()`? 2. Java 中 `Arrays.asList()` 在并发编程中有什么风险?如何避免? 3. 比较 `Arrays.asList()` 和 `ArrayList` 的性能和应用场景差异? 4. 如何在 Java 中使用流式 API 来转换数组为列表? 5. Java 中处理基本类型数组与包装类型列表时有什么常见陷阱?如何解决? [^1]: Arrays 的 asList 方法用于转换数组,但返回列表不支持添加操作。 [^2]: `add()` 方法抛出 UnsupportedOperationException,因为列表固定大小。 [^3]: 返回列表为固定大小,对列表的修改会“直写”到原数组。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值