【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?

简介: 【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?

简述

以下是一个从多个角度对比self__init____str__Markdown表格

self __init__ __str__
类型 参数 方法 方法
作用 引用实例对象本身 初始化实例 定义实例的字符串表示
函数原型 def method(self, ...) def __init__(self, ...) def __str__(self)
返回值 无(作为参数使用) 无(用于初始化) 字符串
是否必须 是(在实例方法中) 否(但通常需要) 否(但如果需要打印或转换为字符串则需要)
使用场景 在实例方法中访问或修改实例的属性,或调用其他实例方法 在创建新实例时设置初始状态 在打印实例或将实例转换为字符串时使用

这个表格提供了self__init____str__的基本对比。具体的使用可能会根据你的需求和类的设计而变化。


在Python中,self__init____str__都是类定义中常见的元素,它们各自的用途和区别如下:

  1. self:在Python中,self是一个约定俗成的名称,用于指代实例对象本身。当你定义一个类的方法时,第一个参数通常被命名为self,它代表了类的实例。通过self,你可以访问和修改实例的属性,或者调用其他的实例方法
class MyClass:
    def my_method(self):
        print("This is a method of the instance: ", self)
  1. init__init__是一个特殊的方法,被称为类的构造器方法。当你创建一个类的新实例时,__init__方法会自动被调用。你可以在__init__方法中设置实例的初始状态,例如初始化实例的属性。
class MyClass:
    def __init__(self):
        self.my_attribute = "Hello, world!"
  1. str__str__也是一个特殊的方法,它应返回一个代表实例的字符串。当你使用print函数打印一个实例,或者使用str函数将一个实例转换为字符串时,__str__方法会被调用。
class MyClass:
    def __init__(self, my_attribute):
        self.my_attribute = my_attribute
    def __str__(self):
        return "MyClass with my_attribute: " + self.my_attribute
my_instance = MyClass("Hello, world!")
print(my_instance)  # 输出:MyClass with my_attribute: Hello, world!

总的来说,self__init____str__都是Python类定义中的重要元素,它们分别用于引用实例本身、初始化实例和定义实例的字符串表示。

原型

在Python中,self__init____str__的函数原型通常如下:

  1. selfself不是一个函数,而是一个在类的方法中使用的参数,用于引用实例对象本身。在定义类的方法时,通常将self作为第一个参数:
def some_method(self, other_arguments):
    # 方法体
  1. init__init__是一个特殊的方法,用于初始化一个类的新实例。它的函数原型如下:
def __init__(self, other_arguments):
    # 方法体 
  1. 在这里,other_arguments是你需要传递给__init__方法的其他参数。
  2. str__str__也是一个特殊的方法,用于返回一个代表实例的字符串。它的函数原型如下:
def __str__(self):
    # 方法体,返回一个字符串
  1. 注意,__str__方法不接受除self之外的其他参数,并且必须返回一个字符串。

在这些函数原型中,self参数是必需的,因为它代表了类的实例。对于__init____str__方法,你可以根据你的需求添加其他参数或修改返回值。

使用场景

以下是self__init____str__在Python中的常见使用场景:

  1. selfself在类的方法中被用作第一个参数,用于引用实例对象本身。这使得实例方法可以访问和修改实例的属性,或者调用其他实例方法。例如,如果你正在编写一个表示银行账户的类,你可能需要使用self来访问和修改账户的余额。
class BankAccount:
    def __init__(self, initial_balance):
        self.balance = initial_balance
    def deposit(self, amount):
        self.balance += amount
    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            print("Insufficient balance!")
  1. init__init__方法在创建类的新实例时被调用,用于初始化实例的状态。例如,如果你正在编写一个表示矩形的类,你可能需要在__init__方法中接收宽度和高度作为参数,并将它们保存为实例的属性。
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def area(self):
        return self.width * self.height
  1. str__str__方法用于定义实例的字符串表示,这在打印实例或将实例转换为字符串时非常有用。例如,如果你正在编写一个表示日期的类,你可能需要在__str__方法中返回一个格式化的日期字符串。
class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
    def __str__(self):
        return f"{self.year}-{self.month:02d}-{self.day:02d}"

这些只是self__init____str__的一些基本使用场景,实际上,你可以根据你的具体需求来使用它们。

结语

在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。

这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。

我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。

目录
相关文章
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
123 4
|
2月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。
|
4月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
5月前
|
XML JSON 安全
分析参数顺序对Python requests库进行POST请求的影响。
最后,尽管理论上参数顺序对POST请求没影响,但编写代码时仍然建议遵循一定的顺序和规范,比如URL总是放在第一位,随后是data或json,最后是headers,这样可以提高代码的可读性和维护性。在处理复杂的请求时,一致的参数顺序有助于调试和团队协作。
176 9
|
6月前
|
数据管理 开发者 Python
揭秘Python的__init__.py:从入门到精通的包管理艺术
__init__.py是Python包管理中的核心文件,既是包的身份标识,也是模块化设计的关键。本文从其历史演进、核心功能(如初始化、模块曝光控制和延迟加载)、高级应用场景(如兼容性适配、类型提示和插件架构)到最佳实践与常见陷阱,全面解析了__init__.py的作用与使用技巧。通过合理设计,开发者可构建优雅高效的包结构,助力Python代码质量提升。
568 10
|
7月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
171 17
|
11月前
|
分布式计算 MaxCompute 对象存储
|
10月前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
217 0
|
SQL JSON C语言
Python中字符串的三种定义方法
Python中字符串的三种定义方法
540 2
|
Python
python之字符串定义、切片、连接、重复、遍历、字符串方法
python之字符串定义、切片、连接、重复、遍历、字符串方法
143 0
python之字符串定义、切片、连接、重复、遍历、字符串方法

推荐镜像

更多