#-*-coding:utf-8-*-
'''created on 2023年11月14日
@author: zroad
'''"""
一、運算子過載的概念:
1、類方法中攔截內建的操作
2、當類的例項處置內建操作,python自動呼叫該方法
""""""
二、內建操作符與類方法對應關係:
__init__ -> 建構函式,x = class(args)
__del__ -> 析構函式,x物件被**
__add__ -> 運算子+,無__iadd__,x+y,x+=y
__or__ -> 運算子|,x|y,x |= y
__str__ -> 轉換 , str(x)
__repr__ -> 列印 , print(x),repr(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]
__setitem__ -> 索引賦值,x[key] = value x[i:j] = sequence
__delitem__ -> 索引和分片刪除 del x[key], del x[i:j]
__len__ -> 長度, len(x)
__bool__(__nonzero__ py2.6中), ->bool(x)
__lt__,__gl__ ->比較運算子, x < y, x > y
__le__,__ge__, ->比較運算子,x <= y,x >= y
__eq__.__ne__, ->比較運算子, x == y,x != y
__radd__, -> 右側加法, other + x
__iadd__, -> 加強加法,x += y
__contains__, ->成員關係測試, item in x
__index__, -> 整數值,hex(x),bin(x),oct(x)
__new__, -> 在__init__之前建立物件
""""""
三、運算子過載例項,索引、分片、自定義迭代器
"""#1、過載索引
class
indexer
(object):
def__getitem__
(self,index):
return index ** 2
x = indexer()
print ("x[5]=",x[5]) #x[5]= 25
#2、屬性引用
class
empty
(object):
def__getattr__
(self,attrname):
#訪問未定義屬性時執行該方法
if attrname == "age":
return
40else:
raise attributeerror,attrname
e = empty()
print
"e.age = ",e.age
#print "e.name = ",e.name
class
accesscontrol
(object):
def__setattr__
(self,attrname,value):
if attrname == "age":
self.__dict__[attrname] == value
else:
raise attributeerror,attrname + "not allowed!"
a = accesscontrol()
a.age = 40
a.name = "zr"
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...