把物件操作熟悉模擬成字典的格式
classfoo:
def__init__
(self,name):
self.name=name
def__getitem__
(self, item):
return self.__dict__
[item]
def__setitem__
(self, key, value):
self.
__dict__[key]=value
def__delitem__
(self, key):
self.
__dict__
.pop(key)
f=foo('
feng')
print(f['
name
'])
上下文管理器要實現__enter__和__exit__的特殊方法。
__enter__(self): 進入上下文管理器時呼叫此方法,其返回值將被放入with-as語句中as說明符指定的變數中。
__exit__(self,type,value,tb):離開上下文管理器呼叫此方法。如果有異常出現,type、value、tb分別為異常的型別、值和追蹤資訊。如果沒有異常,
3個引數均設為none。此方法返回值為true或者false,分別指示被引發的異常得到了還是沒有得到處理。如果返回false,引發的異常會被傳遞出上下文。
檔案上下文管理協議大概是如下實現的:
classopenfile(object):
def__init__
(self,filename,mode):
self.filename=filename
self.mode=mode
def__enter__
(self):
self.f=open(self.filename,self.mode)
return self.f #
作為as說明符指定的變數的值
def__exit__
(self,type,value,tb):
self.f.close()
return false #
異常會被傳遞出上下文
with openfile(
'my_file.txt
','w
') as f:
f.write(
'hello ')
f.write(
'world
')
相當於:
try: 執行__enter__的內容
finally
: 執行__exit__的內容
class c1:
def __init__(self,start):
self.start = start
def __iter__(self):
return self
def next(self):
self.start += 1
return self.start
o1 = c1(10)
for i in o1:
print i
importtime
class
open:
def__init__(self,filepath,mode='
r',encode='
utf-8'):
self.f=open(filepath,mode=mode,encoding=encode)
defwrite(selfself):
pass
def__getattr__
(self, item):
return
getattr(self.f,item)
def__del__
(self):
print('
del'
) self.f.close()
f=open('
a.txt
','w')
del f
上圖中的「__del__」就是乙個析構函式了,當使用del 刪除物件時,會呼叫他本身的析構函式,另外當物件在某個作用域中呼叫完畢,在跳出其作用域的同時析構函式也會被呼叫一次,這樣可以用來釋放記憶體空間。
__del__()也是可選的,如果不提供,則python 會在後台提供預設析構函式
如果要顯式的呼叫析構函式,可以使用del關鍵字,方式如下:
del物件名
class people: __slots__=['x','
y','z'
]p=people() print(people.__dict__
)p.x=1 p.y=2 p.z=3 print
(p.x,p.y,p.z)
p1=people() p1.x=10 p1.y=20 p1.z=20 print(p1.x,p1.y,p1.z) #
print(p1.__dict__)
type成為元素,是所有類的類 ,利用type模擬class關鍵字的建立類的過程
defrun(self):
print('
%s is runing
'%self.name)
class_name='
bar'
bases=(object,)
class_dic=
bar=type(class_name,bases,class_dic)
(bar)
print(type(bar))
物件導向 高階
json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...
物件導向高階
public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...
物件導向高階
私有屬性,不能被子類繼承,在屬性的前面加上 就變為了私有屬性 私有方法,不能被子類繼承,在方法的前面加上 就變為了私有方法 只在前面加,後面不加,一般前後都有 的,屬於類當中自帶的方法或屬性 class class test1 str1 a 私有屬性 def init self pass def m...