上一篇:Python魔法方法的简介 | 手把手教你入门Python之五十三
下一篇:函数案例讲解 | 手把手教你入门Python之五十五
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
运算相关的魔法⽅法
思考:
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
# 1.调用__new__方法申请内存空间
p1 = Person('zhangsan',18)
# 1.调用__new__方法申请内存空间
p2 = Person('zhangsan',18)
print(p1 == p2)
上述代码中,使⽤ ==
运算符⽐较两个对象,结果是True还是False? ==
到底⽐较的是什么?
怎样比较两个对象是否是同一个对象?比较的内存地址。
p1和p2不是一个对象。
is 身份运算符
可以用来判断两个对象是否是同一个对象。
nums1 = [1, 2, 3]
nums2 = [1, 2, 3]
print(nums1 is nums2) # False
print(nums1 == nums2) # True
is比较两个对象的内存地址。
==比较两个对象的值,会调用对象的__eq__
方法,获取这个方法的比较结果。
⽐较运算符相关魔法⽅法
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
# != 本质是调用__ne__方法,或者__eq__ 方法取反
# def __ne__(self, other):
def __lt__(self, other):
return self.age < other.age
# greater than 使用 > 会自动调用这个方法
# def __gt__(self, other):
def __le__(self, other):
return self.age <= other.age
# 使用 >= 会自动调用
# def __ge__(self, other):
s1 = Student('zhangsan', 18)
s2 = Student('zhangsan', 18)
s3 = Student('lisi', 20)
print(s1 == s2)
print(s1 != s2)
print(s1 > s2)
print(s1 >= s2)
print(s1 <= s2)
print(s1 <= s2)
执行结果:
算数运算符相关魔法方法
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __add__(self, other):
return self.age + other
def __sub__(self, other):
return self.age - other
def __mul__(self, other):
return self.age * other
def __truediv__(self, other):
return self.age / other
def __mod__(self, other):
return self.age % other
def __pow__(self, power, modulo=None):
return self.age ** power
s = Student('zhangsan', 18)
print(s + 1) # 19
print(s - 2) # 16
print(s * 2) # 36
print(s / 5) # 3.6
print(s % 5) # 3
print(s ** 2) # 324
类型转换相关魔法⽅法
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __int__(self):
return self.age
def __float__(self):
return self.age * 1.0
def __str__(self):
return self.name
def __bool__(self):
return self.age > 18
s = Student('zhangsan', 18)
print(int(s))
print(float(s))
print(str(s))
print(bool(s))
if s:
print('hello')
执行结果: