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 ...