(一)Python入門-6面向對象編程:10特殊方法和運算符重載-特殊屬性
一:特殊方法和運算符重載
Python的運算符實際上是通過調用對象的特殊方法實現的。比如:
#運算符-特殊方法 a = 20 b = 30 c = a + b d = a.__add__(b) print(‘c=‘,c) print(‘d=‘,d)
運行結果:
c= 50
d= 50
常見的特殊方法統計如下:
每個運算符實際上都對應了相應的方法,統計如下:
我們可以重寫上面的特殊方法,即實現了“運算符的重載”。
【操作】運算符的重載
#測試運算符的重載 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)
運行結果:
jack-----jason
jackjackjackjackjack
二:特殊屬性
Python對象中包含了很多雙下劃線開始和結束的屬性,這些是特殊屬性,有特殊用法。常見的特殊屬性:
【操作】特殊屬性
#測試特殊屬性 class A: passclass 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‘>]
(一)Python入門-6面向對象編程:10特殊方法和運算符重載-特殊屬性