1. 類新增新屬性和新屬性賦值:
__metaclass__ = type
class rectangle:
def __init__(self):
self.width = 0
self.height = 0
def __setattr__(self, name, value):
if name == 'size': # size property = value
self.width, self.height = value
else: #insert new property by dict
self.__dict__[name] = value
def __getattr__(self, name):
if name == 'size':
return self.width, self.height
else:
raise attributeerror
re = rectangle()
re.size = (10,20)
re.pro =
print re.size
print re.pro
__metaclass__ = type
class rec:
def __init__(self):
self.width = 0
self.height = 0
def setsize(self, size):
self.width, self.height = size
def getsize(self):
return self.width, self.height
size = property(getsize, setsize)
rc = rec()
rc.size = (2,3)
print rc.size
2.序列和對映:
__metaclass__ = type
def checkindex(key):
if not isinstance(key, (int, long) ): raise typeerror
if key < 0: raise indexerror
class arithmeticsequence:
def __init__(self, start = 0, step = 1):
self.start = start
self.step = step
self.changed = {}
def __getitem__(self, key):
checkindex(key)
try: return self.changed[key]
except keyerror:
return self.start+key*self.step
def __setitem__(self, key, value):
checkindex(key)
self.changed[key] = value
s = arithmeticsequence(1, 2)
print s[4]
3. __setattr__, __getattr__, __delattr__, __call__定義與用法:
__metaclass__ = type
#新類語法
class mydict(dict): #繼承dict類
#當試圖給特性key賦值時被呼叫
def __setattr__(self, key, value):
self[key] = value
#當特性key被訪問且物件沒有響應的特性時被呼叫
def __getattr__(self, key):
try:
return self[key]
except keyerror, k:
return none
#當試圖刪除特性key時被自動呼叫
def __delattr__(self, key):
try:
del self[key]
except keyerror, k:
return none
#當試圖呼叫特性key時被呼叫
def __call__(self, key):
try:
return self[key]
except keyerror, k:
return none
test = mydict()
test.name = "benson" #呼叫__setattr__
print test('name') #__call__
print test['name'] #dict預設行為
print test.name #__getattr__
del test.name #__delattr__
python基礎知識(2)
1.變數和按引用傳遞 在pyhton中對變數賦值時,你其實是在建立物件的引用。2.動態引用和強型別 python中的物件引用沒有與之相關聯的型別的資訊 即python可以自動判斷所定義的型別不需要進行型別宣告 而隱式轉換只是在很明顯的情況下才會發生。可以用type 檢視變數的型別,也可以用isins...
Python基礎知識(2)
在程式語言中,注釋的作用是為了讓自己或他人更快地了解程式作者的思路和意圖,提高 的可讀性。同時在多人協同開發時,也可以提高開發效率。特備說明 注釋部分不參與 的編譯執行。單行注釋主要應用於對某個變數,等的簡短說明,不能換行,只能在一行內應用。多行注釋主要運用於大段文字的說明,可以換行使用,一般用於對...
Python的基礎知識2
python 的標準資料格式有以下5種,分別是 下面,是這5種型別的相關介紹 數字型別用於儲存數值,資料型別是不允許改變的,這就意味著如果改變量字資料型別的值,將重新分配記憶體空間 建立方式 age 10 grade 3 刪除方式,使用del關鍵字,用法為 del age 也可以連續刪除多個數字物件...