1. 程式人生 > >(一)Python入門-6面向對象編程:10特殊方法和運算符重載-特殊屬性

(一)Python入門-6面向對象編程:10特殊方法和運算符重載-特殊屬性

__str__ code 編程 init 類對象 ima clas str ase

一:特殊方法和運算符重載

  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:
    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‘>]

(一)Python入門-6面向對象編程:10特殊方法和運算符重載-特殊屬性