- 回顾
内置函数 触发时机 __ init __ 构造方法,创建完对象初始化时 __ del __ 析构方法,对象即将销毁时 __ getattr __ 获取不存在的属性 __ setattr __ 设置属性 __ delattr __ 删除属性 __ getitem __ 当做字典操作,获取属性 __ setitem __ 当做字典操作,设置属性 __ delitem __ 当做字典操作,删除属性 __ call __ 将对象当做函数调用时 __ str __ 打印或转换为字符串时 repr与eval
d = {'name': 'dahua', 'age': 18} # 得到对象的字符串表示形式 s = repr(d) print(s, type(s)) # 执行有效的python代码字符串 d2 = eval(s) print(d2, type(d2)) a = 10 b = 20 c = eval('a + b') # c = a + b print(c)
- 自定义对象
class Person: def __init__(self, name, age): self.name = name self.age = age # 对象使用repr方法处理时会自动触发该方法 # 通常返回对象的字符串表示形式 def __repr__(self): # print('__repr__') return "Person('{}', {})".format(self.name, self.age) # 打印对象时会自动触发,若没有则会尝试__repr__,还没有返回 类名+地址 def __str__(self): return 'name: {} age: {}'.format(self.name, self.age) xiaoming = Person('xiaoming', 18) s = repr(xiaoming) print(s) xm = eval(s) print(xm, type(xm))
- 算术运算符重载
- 示例
class Number: def __init__(self, num): self.num = num def __str__(self): return str(self.num) # 对象出现在 '+' 的左边时会自动触发 def __add__(self, other): print('__add__') return self.num + other # 对象出现在 '+' 的右边是会自动触发 def __radd__(self, other): print('__radd__') return self.num + other # '+='运算时会自动调用,若没有此方法,则会尝试__add__ def __iadd__(self, other): print('__iadd__') self.num += other return self n = Number(10) # ret = n + 20 # ret = 20 + n # print(ret) n += 20 print(n)
- 自己研究
运算 | 左边 | 右边 | 复合 |
---|---|---|---|
减法 | __ sub __ | __ rsub __ | __ isub __ |
乘法 | __ mul __ | __ rmul __ | __ imul __ |
除法 | __ truediv __ | __ rtruediv __ | __ itruediv __ |
求余 | __ mod __ | __ rmod __ | __ imod __ |
- 关系运算符重载
class Number: def __init__(self, num): self.num = num # 大于 self > other 或 other < self def __gt__(self, other): print('__gt__') return self.num > other # 大于等于 def __ge__(self, other): print('__ge__') return self.num >= other # 小于 def __lt__(self, other): print('__lt__') return self.num < other # 小于等于 def __le__(self, other): print('__le__') return self.num <= other # 等于 def __eq__(self, other): print('__eq__') return self.num == other # 不等于:!=,若重写此方法则会调用, # 若没重写,则会尝试调用__eq__ def __ne__(self, other): print('__ne__') return self.num != other n = Number(5) print(n > 4) print(4 < n) print(n < 4) print(4 > n) print(n == 4) print(n != 4) print(n >= 4) print(4 <= n) print(n <= 4) print(4 >= n)
__new__
- 示例
class Person(object): # 用于创建对象,需要返回创建的对象 def __new__(cls, *args, **kwargs): print('__new__') return object.__new__(cls) def __init__(self): print('__init__') # p = Person.__new__(Person) # p.__init__() # 相当于上面的操作,但是不要这样用 # p = Person() p1 = Person() p2 = Person() print(id(p1)) print(id(p2))
标签: python
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~