Python的运算符其实是经过调用对象的特殊方法实现的。好比:ssh
#运算符-特殊方法 a = 20 b = 30 c = a + b d = a.__add__(b) print('c=',c) print('d=',d)
运行结果:测试
c= 50
d= 50spa
常见的特殊方法统计以下:3d
每一个运算符实际上都对应了相应的方法,统计以下:code
咱们能够重写上面的特殊方法,即实现了“运算符的重载”。orm
【操做】运算符的重载对象
#测试运算符的重载 class Person: def __init__(self,name): self.name = name def __add__(self, other): if isinstance(other,Person): return '{0}-----{1}'.format(self.name,other.name) else: return '不是同类对象不能相加' def __mul__(self, other): if isinstance(other,int): return self.name*other else: return '不是同类对象不能相加' p1 = Person('jack') p2 = Person('jason') print(p1 + p2) print(p1*5)
运行结果:blog
jack-----jason
jackjackjackjackjackget
Python对象中包含了不少双下划线开始和结束的属性,这些是特殊属性,有特殊用法。常见的特殊属性:hash
【操做】特殊属性
#测试特殊属性 class A: pass class B: pass class C(B,A): def __init__(self,nn): self.nn = nn def cc(self): print('cc') c1 = C(5) print(dir(c1)) print(c1.__dict__) print(c1.__class__) print(C.__bases__) print(C.mro()) print(A.__subclasses__())
运行结果:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cc', 'nn'] {'nn': 5} <class '__main__.C'> (<class '__main__.B'>, <class '__main__.A'>) [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>] [<class '__main__.C'>]