之前使用的__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个对象是否相等了。