2.17 面向物件編程
1.學習了面向物件編程中的一些基礎函式
1.1__init__:
init是實體創建后被呼叫的,用以設定物件屬性的初始值,依據需求看是否需要這個函式,init函式可對類進行初始化,且def之后不可以用return進行回傳,
1.2__new__:
new是在實體創建前被呼叫的,創建一個實體然后回傳該實體(例子中創建了string,回傳一個新的str),繼承一個不可變型別但又想進行修改時使用,new函式提示開辟存盤空間,new的引數會傳給init方法,需要回傳一個實體物件作為回傳值,
class CapStr(str):
def __new__(cls, string):
string = string.upper()
return str.__new__(cls, string)
a = CapStr('sdwhdwisiad')
print(a)
CapStr繼承了str,由于str不可修改,故用new方法進行修改,結果是
SDWHDWISIAD
1.3__del__:
當實體化物件消失(copy的版本被刪掉時不會被呼叫)的時候會呼叫del方法,(在pycharm里運行例子時,由于執行后就被刪掉了所以既列印了init方法也列印了del方法,在idle環境下不存在這個問題)
>>> class A:
... def __init__(self):
... print('got')
... def __del__(self):
... print('dismiss')
...
>>> a1 = A()
got
>>> a2 = a1
>>> a3 = a2
>>> del a3
>>> del a2
>>> del a1
dismiss
2.算數運算與其多載(多載就是重新定義算術運算)
2.1物件可進行的所有算術運算

2.2多載
>>> class New_int(int):
... def __add__(self,other):
... return int.__sub__(self,other)
...
>>> a = New_int(5)
>>> b = New_int(9)
>>> a + b
-4
將原來的加法add方法多載為了減法,(若將加法定義為加法則會產生遞回,超過了最大遞回層次就會報錯)
當當前運算不能正常進行時,自動呼叫其反運算(如add不行則會呼叫radd方法)
>>> class Nint(int):
... def __radd__(self,other):
... return int.__sub__(self,other)
...
>>> a = Nint(5)
>>> b = Nint(3)
>>> a + b
8
>>> 1 + b
2
例中,a,b是同一型別,相加時自動呼叫__add__方法進行相加,而1與b不是同一型別,無法相加,會自動呼叫radd方法,即我們已經定義了的方法,(因為b屬于class Nint,所以self引數是b,other引數是1)
類似還有增量賦值運算,形式為__iadd__
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261073.html
標籤:python
下一篇:藍橋杯:迷宮————Python
