当前位置: 首页> 文旅> 旅游 > python进阶(5):魔术方法篇(1)

python进阶(5):魔术方法篇(1)

时间:2025/7/10 20:52:54来源:https://blog.csdn.net/u013938578/article/details/140351603 浏览次数:0次

之前使用的__init__ 构造方法,是Python类内置的方法之一。

这些内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法

1 __str__ 字符串方法

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = telprint("Student类创建了一个对象")stu = Student("帅哥",31,"18623039321")print(stu)
print(str(stu))

当类对象需要被转换为字符串之时,会输出如下结果(内存地址)

内存地址没有多大作用,我们可以通过__str__方法,控制类转换为字符串的行为。

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = telprint("Student类创建了一个对象")def __str__(self):return f"Student类对象,name={self.name},age={self.age}"stu = Student("帅哥",31,"18623039321")print(stu)
print(str(stu))

效果如下:

2 __lt__ 小于符号比较方法

不使用__lt__。

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = telstu1 = Student("帅哥",31,"18623039321")
stu2 = Student("帅哥w",32,"18623039321")
print(stu1<stu2)
print(stu2<stu1)

结果如下:

直接对2个对象进行比较是不可以的,但是在类中实现__lt__方法,即可同时完成:小于符号 和 大于符号 2种比较

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = teldef __lt__(self, other):return self.age < other.agestu1 = Student("帅哥",31,"18623039321")
stu2 = Student("帅哥w",32,"18623039321")
print(stu1<stu2)
print(stu2<stu1)

结果如下:

比较大于符号的魔术方法是:__gt__,实现方式与__lt__一样,这里就不介绍了。

3 __le__ 小于等于比较符号方法

__le__可用于:<=、>=两种比较运算符上

不使用__le__时,效果如下:

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = telstu1 = Student("帅哥",31,"18623039321")
stu2 = Student("帅哥w",32,"18623039321")
print(stu1<=stu2)
print(stu2<=stu1)

结果如下:

使用__le__时,效果如下:

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = teldef __le__(self, other):return self.age <= other.agestu1 = Student("帅哥",31,"18623039321")
stu2 = Student("帅哥w",32,"18623039321")
print(stu1<=stu2)
print(stu2<=stu1)

结果如下:

>=符号实现的魔术方法是:__ge__,实现方式与__le__一样,这里就不介绍了。

4 __eq__ 比较运算符实现方法

class Student:name = Noneage = Nonetel = Nonedef __init__(self,name,age,tel):self.name = nameself.age = ageself.tel = teldef __eq__(self, other):return self.age == other.agestu1 = Student("帅哥",31,"18623039321")
stu2 = Student("帅哥w",31,"18623039321")
print(stu1==stu2)

结果如下:

注意:

  • 不实现__eq__方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。
  • 实现了__eq__方法,就可以按照自己的想法来决定2个对象是否相等了。

关键字:python进阶(5):魔术方法篇(1)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: