DW學習 Python基礎11(魔法方法)

2021-10-08 18:40:57 字數 4932 閱讀 2443

2 魔法運算:算數運算

3增量賦值運算子

4一元運算子

6 習題

解釋:當物件呼叫類時,__init__(self[, ...])會自動被觸發,python會自動將當前呼叫的空物件傳給self引數。

過程:

注意:__init__(self[, ...])不能返回什麼值,返回的是none。

class

rec:

def__init__

(self,x,y)

: self.x=x

self.y=y

defgetperi

(self)

:return

(self.x+self.y)*2

defgetarea

(self)

:return self.x*self.y

rect=rec(3,

4)# 將rect這個物件傳給self

print

(rect.getperi())

# 14

print

(rect.getarea())

# 12

過程:

作用:構造方法。__new__是在乙個物件例項化的時候所呼叫的第乙個方法,在呼叫__init__初始化前,先呼叫__new__

classa:

# 構造方法,建立一塊物件的空間,有乙個指標能指向類--》__new__

def__new__

(cls,

*args,

**kwargs)

: o=

super()

.__new__(cls)

print

('執行new'

,o)return o

def__init__

(self)

:print

('執行init'

,self)a()

# 執行new <__main__.a object at 0x000001c29ad65f40>

# 執行init <__main__.a object at 0x000001c29ad65f40>

1__str__

2__repr__

classp:

def__init__

(self)

: self.student=

def(self,name)

:py22=p(

)print

(py22)

# <__main__.p object at 0x00000252bc1a49d0>

'jaja'

)print

(py22)

# <__main__.p object at 0x00000252bc1a49d0>--

----

----

----

----

----

----

----

----

---classp:

def__init__

(self)

: self.student=

def(self,name)

:def

__str__

(self)

:return

str(self.student)

py22=p(

)print

(py22)

# 'jaja'

)print

(py22)

# ['jaja']

classc(

object):

def__init__

(self)

:print

('into c __init__'

)def

__del__

(self)

:print

('into c __del__'

)c1 = c(

)# into c __init__

c2 = c1

c3 = c2

del c3

del c2

del c1

# into c __del__

classa(

int)

:def

__add__

(self, other)

:return

int.__add__(self,other)

def__sub__

(self, other)

:return

int.__sub__(self, other)

a=a(2)

b=a(3)

print

(a+b)

# 5print

(a-b)

# -1

print

(divmod(7

,2))

# (3, 1)

print

(divmod(8

,2))

# (4, 0)

__pow__(self, other[, module])定義當被power()呼叫或**運算時的行為

__lshift__(self, other)定義按位左移位的行為:<<__rshift__(self, other)定義按位右移位的行為:>>__and__(self, other)定義按位與操作的行為:&__xor__(self, other)定義按位異或操作的行為:^__or__(self, other)定義按位或操作的行為:|反運算魔方方法,與算術運算子保持一一對應,不同之處就是反運算的魔法方法多了乙個「r」。當檔案左操作不支援相應的操作時被呼叫。

a + b

這裡加數是a,被加數是b,因此是a主動,反運算就是如果a物件的__add__()方法沒有實現或者不支援相應的操作,那麼 python 就會呼叫b__radd__()方法。

class

nint

(int):

def__radd__

(self, other)

:return

int.__sub__(other, self)

# 注意 self 在後面

a = nint(5)

b = nint(3)

print

(a + b)

# 沒有呼叫__radd__方法

# 8

print(1

+ b)

# 沒有找到1的__add__方法,只找到b的__radd__方法

# -2

1、上面提到了許多魔法方法,如__new__,__init__,__str__,__rstr__,__getitem__,__setitem__等等,請總結它們各自的使用方法。

2、利用python做乙個簡單的定時器類

要求:

import time

class

mytime

(object):

def__init__

(self)

: self.__info =

'未開始計時!'

self.__begin =

none

self.__end =

none

self.__jg =

0def

__str__

(self)

:return self.__info

def__repr__

(self)

:return self.__info

defstart

(self)

:print

('計時開始...'

) self.__begin = time.localtime(

)def

stop

(self):if

not self.__begin:

print()

return

self.__end = time.localtime(

) self.__jg = time.mktime(self.__end)

- time.mktime(self.__begin)

self.__info =

'共執行了%d秒'

% self.__jg

print

('計時結束!'

)return self.__jg

def__add__

(self, other)

:return

'共執行了%d秒'

%(other.__jg + self.__jg)

DW學習 Python基礎03(異常處理)

3 try except else語句 4 try except finally語句 5 自定義異常 raise語句 6 習題 try 可能發生異常的 except 如果出現異常執行的 注意 使用except而不帶任何異常型別,這不是乙個很好的方式,我們不能通過該程式識別出具體的異常資訊,因為它捕獲...

DW學習 Python基礎13(檔案與檔案系統)

2 檔案的讀寫 3 檔案備份 4 os模組及常用函式 5 批量修改檔名 6 習題 注意 訪問模式可以省略,預設為r模式 例子 a open demo1.txt r print a.read 6 a.close aaaaa 有乙個換行符 例子 a open demo1.txt r b a.readli...

Python基礎(11)模組

全域性變數 title 模組1 函式 defsay hello print 我是 s title 類class dog object pass 全域性變數 title 模組2 函式 defsay hello print 我是 s title 類class cat object passimport ...