在類中,對內建物件(例如:整數和列表)所能做的事,幾乎都有相應的特殊名稱的過載方法。最常見的就是過載類的建構函式(__init__
函式)
方法重構
呼叫__init__
建構函式
物件建立:x = class(args)
__del__
析構函式
x物件收回
__add__
運算子+
如果沒有_iadd_, x + y, x += y
__or__
運算子|(位or)
如果沒有 _ior_, x | y, x |= y
__repr__, __str__
列印,轉換
print(x), repr(x), str(x)
__call__
函式呼叫
x(*args, **kargs)
__getattr__
點號運算
x.undefined
__setattr__
屬性賦值語句
x.any = value
__delattr__
屬性刪除
del x.any
__getattribute__
屬性獲取
x.any
__getitem__
索引運算
x[key], x[i:j], 沒__iter__時的for迴圈和其他迭代器
__setitem__
索引賦值語句
x[key] = value, x[i:j] = sequence
__delitem__
索引和分片刪除
del x[key], del x[i:j]
__len__
長度len(x), 如果沒有__bool__, 真值測試
__bool__
布林測試
bool(x), 真測試(在python2.6中叫做_
__lt__, __gt__
特定比較
x < y, x > y, x <= y, x >= y
__le__, __ge__
特定比較
x == y, x != y
__radd__
右側加法
other + x
__iadd__
實地(增強的)加法
x += y (or else add
__iter__, __next__
迭代環境
i = iter(x), next(i); for loops,
__contains__
成員關係測試
item in x(任何可迭代的物件)
__index__
整數值hex(x), bin(x), oct(x), o[x], o[x:]
__enter__, __exit__
環境管理器
with obj as var:
__get__, __set__
描述符屬性
x.attr, x.attr = value, del x.value
__delete__
描述符屬性
descr.__delete__(self, obj) –> none
__new__
建立在__init__之前建立物件
下面我們看乙個例子,重構列表中+
運算子, 變成只列印: hello, python.
# 先看看原list加號運算子
>>> lst = list()
>>> lst
[1]>>> lst + [2]
>>> lst
[1, 2]
# 重構`+`號運算子方法__add__
class
a(list):
def__add__
(self, other):
print
'hello, python.'
>>> newlst = a()
>>> newlst + [2]
hello, python.
>>> newlst
[1]
我們在類a中過載了列表+
號運算子的方法__add__
,它只輸出hello, python.
,所以當我們類a的例項物件newlst呼叫+
號運算子時,並沒有像lst一樣,新增新的成員,而只是輸出字串(這就是重構運算子方法)。 Python 的方法過載
為防止兩個模組互相匯入的問題,python預設所有的模組都只匯入一次,如果需要重新匯入模組,python2 7可以直接用reload python3可以用下 為防止兩個模組互相匯入的問題,python預設所有的模組都只匯入一次,如果需要重新匯入模組,python2.7可以直接用reload pyth...
JavaScript中的方法過載
對js有些了解的人都知道,在js中根本就不存在像c 中的那種方法過載,而有的只是方法的覆蓋,當你在js中敲入兩個或多個同名的方法的時候,不管方法 函式 的引數個數怎麼個不同,這個方法名只能屬於最後定義的那個函式。也就是說後乙個方法會把前面同名的方法給覆蓋掉。我們看一段下面的 在瀏覽器中檢視的結果是 ...
Web Service 中過載的實現方法
通過在方法中新增乙個messagename屬性,並將類的webservicebinding 屬性中conformsto 指定為wsiprofiles.none。具體寫法 請檢查下面每個標準化宣告是否存在衝突。請按建議修正衝突,或向 配置節新增設定,對整個 vroot 關閉 bp 1.1 一致性警告。...