Python 类内置魔法方法

本文介绍了Python中_str_()方法的应用,通过示例对比了使用_str_()方法前后打印对象的区别,阐述了该方法如何帮助开发者更好地进行程序调试。

一、_str_()  方法
  Python class 内置函数有很多,想到了先记下来._str()_,_str_()方法和_init_()方法类似,都是一些特殊方法,都会自动执行的,_init_()是初始化的作用,_str_()则是用来返回对象的字符串表达式。
  在我们编写一个新的Python类的时候,总是在最开始位置写一个初始化方法_init_(),以便初始化对象,然后会写一个_str_()方法,方面我们调试程序。

class student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):  #自动调用,返回
        return self.name+":"+str(self.age)+"岁"

a = student("小熊", 20)
print(a)

>>>
   小熊:20#结果

如果不写_str_(),print(a)的话不会返回字符串,只会返回a实例化的对象:

class student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

a = student("小熊", 20)
print(a)

>>>
  <__main__.student object at 0x000002C20DE651D0>  #结果
Python 中,内置方法(也称为“魔法方法”或“特殊方法”)用于定义对象的行为和属性,使得能够与 Python内置操作和语法无缝集成。以下是一些常用的内置方法及其用途: ### `__init__(self, ...)` 这是的构造方法,用于在创建对象时初始化其属性。它在对象被创建后自动调用,无需显式调用[^2]。 示例: ```python class Student: def __init__(self, name, age, tel): self.name = name self.age = age self.tel = tel ``` ### `__new__(cls, ...)` 这是一个在 `__init__` 之前调用的静态方法,负责创建的实例。它必须返回一个的实例,通常是通过调用 `object.__new__(cls)` 来实现。通过重写 `__new__`,可以控制对象的创建过程[^4]。 示例: ```python class MyClass: def __new__(cls, *args, **kwargs): print("Creating instance") return super().__new__(cls) ``` ### `__repr__(self)` 此方法返回对象的“官方”字符串表示形式,通常用于调试。当使用内置函数 `repr()` 或在交互式解释器中直接输入对象名称时会调用该方法。理想情况下,返回的字符串应能够用于重新创建该对象[^1]。 示例: ```python def __repr__(self): return f"Student(name='{self.name}', age={self.age}, tel='{self.tel}')" ``` ### `__str__(self)` 此方法返回对象的“非正式”字符串表示形式,通常用于最终用户。当使用 `str()` 函数或 `print()` 函数时会调用该方法。如果未定义 `__str__`,Python 将退回到使用 `__repr__`[^3]。 示例: ```python def __str__(self): return f"Student对象,name={self.name}, age={self.age}, tel={self.tel}" ``` ### `__del__(self)` 这是的析构方法,在对象被销毁时自动调用。它用于执行清理工作,例如关闭文件或网络连接。需要注意的是,不能依赖 `__del__` 来确保资源的及时释放,因为其调用时机不确定。 ### `__call__(self, ...)` 此方法允许实例像函数一样被调用。通过实现 `__call__`,可以使得的实例具有似函数的行为。 示例: ```python def __call__(self, *args, **kwargs): print("Instance is called") ``` ### `__len__(self)` 此方法用于定义 `len()` 函数的行为,返回容器中元素的数量。 ### `__getitem__(self, key)` 和 `__setitem__(self, key, value)` 这些方法用于定义使用索引访问和赋值操作的行为。`__getitem__` 在使用 `obj[key]` 语法获取值时调用,而 `__setitem__` 在使用 `obj[key] = value` 语法设置值时调用。 ### `__iter__(self)` 和 `__next__(self)` 这些方法用于定义迭代器的行为。`__iter__` 返回迭代器对象本身,而 `__next__` 返回容器中的下一个元素。 ### `__eq__(self, other)`、`__lt__(self, other)` 等 这些方法用于定义对象之间的比较行为。例如,`__eq__` 定义等于操作符 `==` 的行为,`__lt__` 定义小于操作符 `<` 的行为。 ### 示例代码 ```python class Student: def __init__(self, name, age, tel): self.name = name self.age = age self.tel = tel def __repr__(self): return f"Student(name='{self.name}', age={self.age}, tel='{self.tel}')" def __str__(self): return f"Student对象,name={self.name}, age={self.age}, tel={self.tel}" def __call__(self): print("Instance is called") # 创建对象 stu = Student("张三", 12, "2143235") # 输出对象的字符串表示 print(stu) # 调用 __str__ print(str(stu)) # 调用 __str__ print(repr(stu)) # 调用 __repr__ # 调用对象 stu() # 调用 __call__ ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值