python_面向对象
面向?qū)ο缶幊?br />?? ?object(對象)
?? ?什么是對象
?? ??? ?對象是指現(xiàn)實中的物體或?qū)嵨?br />?? ?什么是面向?qū)ο?br />?? ??? ?把一切看成對象(實例),讓對象和對象之間建立關(guān)聯(lián)關(guān)系
?? ?對象都有什么特征
?? ??? ?對象有很多屬性(名詞),用變量記錄屬性
?? ??? ??? ?姓名,年齡,性別等
?? ??? ?對象有很多行為(動作,動詞),用函數(shù)(方法)表示行為
?? ??? ??? ?學(xué)習(xí),吃飯,睡覺,踢球,工作
?? ?什么是類class:
?? ??? ?擁有相同屬性和行為的對象分為一組,即為一個類
?? ??? ?類是用來描述對象的工具,用類可以創(chuàng)建同類對象
?? ?類的創(chuàng)建語句:
?? ??? ?語法:class 類名(繼承列表):
?? ??? ??? ??? ?'''類的文檔字符串'''
?? ??? ??? ??? ?實例方法定義(類內(nèi)的函數(shù)稱為方法method)
?? ??? ??? ??? ?類變量定義
?? ??? ??? ??? ?類方法定義
?? ??? ??? ??? ?靜態(tài)方法定義
?? ??? ?作用:
?? ??? ??? ?1、創(chuàng)建一個類
?? ??? ??? ?2、用于描述此類對象的行為和屬性
?? ??? ??? ?3、類用于創(chuàng)建此類的一個或多個對象(實例)
??? 類 和 對象
?? ??? ?類?? |?? ?? 對象????? 實例
?? ?? class? |? object?? instance
?? ?構(gòu)造函數(shù)
?? ??? ?表達(dá)式:類名([創(chuàng)建傳參列表])
?? ??? ?作用:創(chuàng)建這個類的實例對象,并返回此實例對象的引用關(guān)系
?? ?實例(對象)說明
?? ??? ?實例有自己的作用域和名字空間,可以為該實例添加實例變量(屬性)
?? ??? ?實例可以調(diào)用類方法和實例方法
?? ??? ?實例可以訪問類變量和實例變量
?? ?實例方法:
?? ??? ?語法:calss 類名(繼承列表):
?? ??? ??? ??? ?def 實例方法名(self,參數(shù)1,參數(shù)2...):
?? ??? ??? ??? ??? ?'''實例方法的的文檔字符串'''
?? ??? ??? ??? ??? ?語句塊
?? ??? ?作用:用于描述一個對象的行為,讓此類型的全部對象都擁有相同的行為
?? ??? ?說明:
?? ??? ??? ?1、實例方法實質(zhì)是函數(shù),是定義在類內(nèi)的函數(shù)
?? ??? ??? ?2、實例方法至少有一個形參,第一個形參代表調(diào)用這個方法的實例,一般命名為”self“
?? ??? ?實例方法的調(diào)用語法:
?? ??? ??? ?1、實例.實例方法名(調(diào)用傳參)
?? ??? ??? ?2、類名.實例方法名(實例,調(diào)用傳參)
??? 屬性 attribute(也叫實例變量)
?? ??? ?每個實例都可以有自己的變量,此變量稱為實例變量(也叫屬性)
?? ??? ?屬性的使用語法:實例名.屬性名
?? ??? ?賦值規(guī)則:
?? ??? ??? ?1、首次為屬性賦值,則創(chuàng)建此屬性
?? ??? ??? ?2、再次為屬性賦值,則必改變屬性的綁定關(guān)系
?? ??? ?作用:用來記錄對象自身的數(shù)據(jù)
??? 實例方法和實例變量(屬性)結(jié)合使用
class Dog:def eat(self,food):print("%s的%s正在吃%s"%(self.color,self.kinds,food)) dog1 = Dog() dog1.kinds = '京巴' #添加屬性kinds dog1.color = '白色' #添加屬性color dog1.eat("狗糧")#該語句不能放在kinds和color屬性被添加之前 dog2 = Dog() dog2.kinds = '哈士奇' #添加屬性kinds dog2.color = '黑色' #添加屬性color dog2.eat("包子") View Code??? 刪除屬性
?? ??? ?用del語句可以刪除一個對象的實例變量
?? ??? ?語法:
?? ??? ??? ?del 對象.實例變量名
?? ??? ?示例:
?? ??? ??? ?class Cat:
?? ??? ??? ??? ?pass
?? ??? ??? ?c1 = Cat()?? ??? ?#創(chuàng)建實例對象
?? ??? ??? ?c1.color = "白色"#添加屬性
?? ??? ??? ?del c1.color? ??? ?#刪除屬性
?? ??? ??? ?print(c1.color)#屬性錯誤
?? ?初始化方法:
?? ??? ?作用:對新創(chuàng)建的對象添加實例變量(屬性)或相應(yīng)的資源
?? ??? ?語法:
?? ??? ??? ?class 類名(繼承列表):
?? ??? ??? ??? ?def __init__(self[,形參列表]):
?? ??? ??? ??? ??? ?語句塊
?? ??? ?說明:
?? ??? ??? ?1、初始化方法名必須為__init__不可改變
?? ??? ??? ?2、初始化方法會在構(gòu)造函數(shù)創(chuàng)建實例后自動調(diào)用,且將實例自身通過第一個參數(shù)self傳入__init__方法
?? ??? ??? ?3、構(gòu)造函數(shù)的實參將通過__init__方法的形參傳入__init__方法中
?? ??? ??? ?4、初始化方法內(nèi)部如果需要返回,則只能返回None
? 析構(gòu)方法:
?? ??? ?語法:class 類名(繼承列表):
?? ??? ??? ?def __del__(self):
?? ??? ??? ??? ?語句塊
?? ??? ?說明:析構(gòu)方法在對象銷毀時被自動調(diào)用
?? ??? ?作用:清理此對象所占用的資源
?? ??? ?python不建議在析構(gòu)方法中做任何事情,因為對象銷毀的時間難以確定
?? ?預(yù)置實例屬性:
?? ??? ?__dict__屬性:
?? ??? ??? ?此屬性綁定一個存儲此實例自身實例變量(屬性)的字典,也可以存儲類中的變量,文檔字符串,方法
?? ??? ?示例:
?? ??? ??? ?class Dog():
?? ??? ??? ??? ?pass
?? ??? ??? ?dog = Dog()
?? ??? ??? ?print(dog.__dict__)#{}
?? ??? ??? ?dog.kinds = "aa"
?? ??? ??? ?print(dog.__dict__)#{"kinds":"aa"}
?? ??? ??? ?dog.__dict__["color"]= "red"
?? ??? ?__class__屬性:
?? ??? ??? ?此屬性用來綁定創(chuàng)建此實例的類
?? ??? ??? ?作用:可以借助此屬性來訪問創(chuàng)建此實例的類
?? ??? ??? ?示例:
?? ??? ??? ??? ?class Dog()
?? ??? ??? ??? ??? ?pass
?? ??? ??? ??? ?dog1=Dog()
?? ??? ??? ??? ?dog2 = dog1.__class__()#等同于dog2 = Dog()
?? ? 面向?qū)ο蟮木C合示例
?? ? ?? ?有兩個人:
?? ? ?? ??? ?1、姓名:張三? 年齡:35
?? ? ?? ??? ?2、姓名:李四? 年齡:38
?? ? ?? ?行為:
?? ? ?? ??? ?1、交別人學(xué)東西teach
?? ? ?? ??? ?2、賺錢
?? ? ?? ??? ?3、借錢
?? ? ?? ?事情:
?? ? ?? ??? ?張三 教 李四 學(xué) python
?? ? ?? ??? ?李四 教 張三 學(xué) 跳皮筋
?? ? ?? ??? ?張三 上班賺了 1000 元錢
?? ? ?? ??? ?李四 向 張三 借了 200 元錢
?? ? 用于判斷類的函數(shù):
?? ? ?? ?isinstance(obj,class_or_tuple)返回一個對象obj是否為某個類class或某些類的實例,如果是返回True,否則返回False
?? ? ?? ?type(obj)?? ?返回對象的類型
?? ? 示例:
?? ? ?? ??? ?class Dog:
?? ? ?? ??? ??? ?pass
?? ? ?? ??? ?class Cat:
?? ? ?? ??? ??? ?pass
?? ? ?? ??? ?animal = Dog()
?? ? ?? ??? ?isinstance(animal,Dog) #True
?? ? ?? ??? ?isinstance(animal,Cat) #False
?? ? ?? ??? ?isinstance(animal,(Cat,int,list)) #False
?? ? ?? ??? ?isinstance(animal,(Cat,int,list,Dog)) #True
類變量 class variable(也叫類屬性):
?? ?類變量是類的屬性,此屬性屬于類
?? ?作用:用來記錄類的相關(guān)數(shù)據(jù)
?? ?說明:
?? ??? ?1、類變量可以通過類直接訪問
?? ??? ?2、類變量可以通過類的實例直接訪問
?? ??? ?3、類變量可以通過類的實例的__class__屬性訪問
?? ?實例:
?? ??? ?class Human:
?? ??? ??? ?count = 0 #創(chuàng)建類變量
??? 類變量的應(yīng)用案例:
?? ??? ?用類變量來記錄對象的個數(shù)
類的文檔字符串:
?? ?類內(nèi)的一個沒有賦值給任何變量的字符串是類的文檔字符串
?? ?說明:
?? ??? ?1、類的文檔字符串用類的__doc__屬性可以訪問
?? ??? ?2、類的文檔字符串可以用help()函數(shù)查看
類的__slots__列表:
?? ?作用:限定一個類的實例只能有固定的屬性(實例變量),通常為了防止錯寫屬性名而發(fā)生運(yùn)行時錯誤
?? ?說明:含有__slots__列表的類創(chuàng)建的實例對象沒有__dict__屬性,即此實例不用字典來保存對象的屬性(實例變量)
類方法 @classmethod
?? ?類方法是描述類的行為的方法,類方法屬于類
?? ?說明:
?? ??? ?1、類方法需要用@classmethod裝飾器定義
?? ??? ?2、類方法至少有一個形參,第一個形參用于綁定類,約定寫為‘cls’
?? ??? ?3、類和該類的實例都可以調(diào)用類方法
?? ??? ?4、類方法不能訪問此類創(chuàng)建的實例的屬性(只能訪問類變量)
問題: ?繼承 inheritance 和? 派生? derived ??? 顯示調(diào)用基類的初始化方法: 用于類的函數(shù): 多態(tài) polymorphic 面向?qū)ο蟮木幊陶Z言的特征: 多繼承的MRO(Method Resolution Order)問題: 函數(shù)重寫 override: ? 對象轉(zhuǎn)化為字符串函數(shù)重寫 對象轉(zhuǎn)字符串函數(shù)的重寫方法: 4、print(對象)相當(dāng)于print(str(對象)),一個對象(實例)就是首先尋找__str__方法,在尋找__repr__方法 內(nèi)建函數(shù)的重寫: 布爾測試函數(shù)的重寫: 迭代器(高級): ?對象的屬性管理函數(shù): 運(yùn)算符重載: 反向算數(shù)運(yùn)算符的重載: 符合賦值運(yùn)算符的重載: 運(yùn)算符重載說明: 索引和切片運(yùn)算符的重載: ?類的特殊成員 1、__call__()方法 ?metaclass(類的祖宗) 1、Python中一切事物都是對象 2、class Foo: pass obj = Foo() #obj是對象,Foo類的對象 #Foo類也是一個對象,type的對象 3、類都是type類的對象,type(...) ? ? ? ? ? ? 轉(zhuǎn)載于:https://www.cnblogs.com/xdl-smile/p/9346948.html
以上是生活随笔為你收集整理的python_面向对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
?? ?1、類方法屬于類
?? ?2、實例方法屬于該類的實例
?? ?3、類內(nèi)能不能有函數(shù),既不屬于類又不屬于類的實例?
靜態(tài)方法 @staticmethos
?? ?靜態(tài)方法不屬于類,也不屬于類的實例,它相當(dāng)于定義在類內(nèi)的普通函數(shù),只是它的作用域?qū)儆陬?/p> class A:@staticmethoddef myadd(x,y):'''此方法為靜態(tài)方法,此方法的形參不需要傳入類或?qū)嵗?/span>'''return x+y
print("1+2=",A.myadd(1,2))
a = A()
print("100+200=",a.myadd(100,200))
print(myadd(10,20))#NameError: name 'myadd' is not defined View Code
?? ?什么是繼承/派生
?? ??? ?1、繼承是指從已有的類中衍生出新類,新類具有原有類的行為和屬性,并能擴(kuò)展新的行為和屬性
?? ??? ?2、派生就是從一個已有類中衍生(創(chuàng)建)新類,在新類上可以添加新的屬性和行為
?? ?繼承和派生的目的:
?? ??? ?1、繼承是延續(xù)舊類的功能
?? ??? ?2、派生是為了在舊類的基礎(chǔ)上添加新的功能
?? ?作用:
?? ??? ?1、用繼承派生機(jī)制,可以將一些共有功能加在基類中,實現(xiàn)代碼的共享
?? ??? ?2、在不改變基類的基礎(chǔ)上改變原有的功能
?? ?繼承/派生的名詞:
?? ??? ?基類(base class),超類(super class),父類(father class)
?? ??? ?派生類(derived class),子類(child class)
?? ?單繼承:
?? ??? ?語法:class 類名( 基類名):
?? ??? ??? ??? ?語句塊
?? ??? ?說明:單繼承是指派生類由一個基類衍生出來的類
?? ?繼承說明:
?? ??? ?1、任何類都直接或間接的繼承自object類
?? ??? ?2、object類是一切類的超類(祖類)
?? ?類的__base__屬性:
?? ??? ?__base__屬性用來記錄此類的基類
?? ??? ?說明:類名.__base__ 返回的是繼承的第一個類
?? ?覆蓋 override:
?? ??? ?什么是覆蓋:
?? ??? ??? ?覆蓋是指在有繼承關(guān)系的類中,子類中實現(xiàn)了與基類同名的方法,在子類實例調(diào)用該方法時,實例調(diào)用的是子類中的覆蓋版本的方法,這種現(xiàn)象叫做覆蓋
?? ?問題:當(dāng)覆蓋發(fā)生時,子類對象能否訪問父類中的方法?
?? ??? ?子類對象顯式調(diào)用基類方法的方式:
?? ??? ??? ?基類名.方法名(實例,實際調(diào)用傳參)
?? ??? ?super 函數(shù):
?? ??? ??? ?super(type,obj) 返回綁定超類的實例
?? ??? ??? ?super() 返回綁定超類的實例,等同于:super(__class__,實例方法的第一個參數(shù),必須在方法內(nèi)調(diào)用)
?? ??? ?當(dāng)子類中實現(xiàn)了__init__方法時,基類的__init__方法并不會被調(diào)用,此時需要顯式調(diào)用
?? ?issubclass(cls,class_or_tuple):
?? ??? ?判斷一個類是否繼承自其它的類,如果此類cls是class或tuple中的一個派生子類則返回True,否則返回False
?? ?說明:cls是class的子類的子類...也返回True
查看python內(nèi)建類的繼承關(guān)系的方法:
?? ?help(__bulitins__)
封裝 enclosure
?? ?1、封裝是指隱藏類的實現(xiàn)細(xì)節(jié),讓使用者不用關(guān)心這些細(xì)節(jié)
?? ?2、封裝的目的是讓使用者盡可能少的使用實例變量(屬性)進(jìn)行操作
私有屬性:
?? ?python類中,以雙下劃線“__”開頭的,不以雙下劃線結(jié)尾的標(biāo)識符為私有成員,在類的外部無法直接訪問
?? ?字面意思:“多種狀態(tài)”
?? ?多態(tài)是指在繼承/派生關(guān)系的類中,調(diào)用基類對象的方法,實際能調(diào)用子類的覆蓋版本方法的現(xiàn)象叫多態(tài)
?? ?說明:
?? ??? ?多態(tài)調(diào)用的方法與對象相關(guān),不與類型相關(guān)
?? ??? ?Python的全部對象都只有“運(yùn)行時狀態(tài)(動態(tài))”,沒有“C++/Java”里的“編譯時狀態(tài)(靜態(tài))”
?? ?繼承
?? ?封裝
?? ?多態(tài)
?? ?如:C++(支持多繼承)/ Java /Python(支持多繼承)/Swift /C#
多繼承 multiple inheritance
?? ?多繼承是指一個子類繼承自兩個或兩個以上的基類
?? ?語法:
?? ??? ?class 類名(基類名1,基類名2....):
?? ??? ??? ?語句塊
?? ?說明:
?? ??? ?1、一個子類同時繼承自多個父類,父類中的方法可以同時被繼承下來
?? ??? ?2、如果兩個父類中有同名的方法,而在子類中又沒有覆蓋此方法時,調(diào)用結(jié)果難以確定
?? ?多繼承的問題(缺陷):
?? ??? ?標(biāo)識符(名字空間沖突的問題)
?? ??? ??? ?要謹(jǐn)慎使用多繼承
?? ?類內(nèi)的__mro__屬性用來記錄繼承方法的查找順序
?? ?重寫是在自定義的類內(nèi)添加相應(yīng)(內(nèi)建函數(shù)的方法)的方法,讓自定義的類生成的對象(實例)像內(nèi)建對象一樣進(jìn)行內(nèi)建的函數(shù)操作
?? ??? ?repr(obj)返回一個代表此對象的表達(dá)式字符串,通常:eval(repr(obj)) == obj
?? ??? ?str(obj)通過給定的對象返回一個字符串(這個字符串通常是給人看的)
?? ?repr()函數(shù)的重寫方法:
?? ??? ?def __repr__(self):
?? ??? ??? ?return 能夠表達(dá)self內(nèi)容的字符串(可以通過eval()方法反推)
?? ?str()函數(shù)的重寫方法:
?? ??? ?def __str__(self):
?? ??? ??? ?return 人能看懂的字符串
?? ?說明:
?? ??? ?1、str(obj)函數(shù)優(yōu)先調(diào)用obj.__str__()方法返回字符串
?? ??? ?2、如果obj沒有__str__()方法,則調(diào)用obj.__repr__()方法返回的字符串
?? ??? ?3、如果obj沒有__repr__()方法,則調(diào)用object類的__repr__()實例方法顯示<XXXXX>格式的字符串
數(shù)值轉(zhuǎn)換函數(shù)的重寫:
?? ?def __complex__(self)?? ??? ?? complex(obj)函數(shù)調(diào)用
?? ?def __int__(self)?? ??? ??? ??? ? ? int(obj)函數(shù)調(diào)用
?? ?def __float__(self)?? ??? ??? ??? ?float(obj)函數(shù)調(diào)用
?? ?def __bool__(self)?? ??? ??? ??? ?bool(obj)函數(shù)調(diào)用
?? ?__abs__??? ??? ??? ??? ??? ??? ? ?? abs(obj)
?? ?__len__?? ??? ??? ??? ??? ??? ??? ?? len(obj)
?? ?__reversed__?? ??? ??? ??? ??? ? reversed(obj)
?? ?__round__?? ??? ??? ??? ??? ??? ?? round(obj)
?? ?格式:def? __bool__(self):
?? ??? ??? ? ....
?? ?作用:
?? ??? ?1、用于bool(obj)函數(shù)取值
?? ??? ?2、用于if語句真值表達(dá)式中
?? ??? ?3、用于while語句真值表達(dá)式中
?? ?說明:
?? ??? ?1、優(yōu)先調(diào)用__bool__方法取值
?? ??? ?2、如果不存在__bool__方法,則用__len__()方法取值,后判斷是否為零值,如果不為零返回True,否則返回False
?? ??? ?3、如果再沒有__len__方法,則直接返回True
?? ?什么是迭代器
?? ??? ?可以通過next(it)函數(shù)取值的對象就是迭代器
?? ?迭代器協(xié)議:
?? ??? ?迭代器協(xié)議是指對象能夠使用next函數(shù)獲取下一項數(shù)據(jù),在沒有下一項數(shù)據(jù)是觸發(fā)StopIterator來終止迭代的約定
?? ?實現(xiàn)方法:
?? ??? ?類內(nèi)需要有__next__(self)方法來實現(xiàn)迭代器協(xié)議
?? ?語法形式:
?? ??? ?class MyIterator:
?? ??? ??? ?def __next__(self):
?? ??? ??? ??? ?迭代器協(xié)議的實現(xiàn)
?? ??? ??? ??? ?return 數(shù)據(jù)
什么是可迭代對象:
?? ?1、是指能用iter(obj)函數(shù)返回迭代器的對象(實例)
?? ?2、可迭代對象內(nèi)部一定要定義__iter__(self)方法來返回迭代器
可迭代對象的語法形式:
?? ?class MyIterable:
?? ??? ?def __iter__(self):
?? ??? ??? ?語句塊
?? ??? ??? ?return 迭代器
?? ?1、getattr(obj,name[,dafault])?? ?從一個對象得到對象的屬性;gettattr(x,'y')等同于x.y;當(dāng)屬性y不存在時,如果有default參數(shù),則返回default,如果沒有給出default則產(chǎn)生一 個AttributeError錯誤
?? ?2、hasattr(obj,name)?? ? 用給定的name返回obj是否有屬性,如果有返回True,否則返回False,此種做法可以避免在getattr(obj,name)時引發(fā)錯誤
?? ?3、setattr(obj,name,value)? 給對象obj的名為name的屬性設(shè)置相應(yīng)的值value,setattr(x,'y',v)等同于x.y = v
?? ?4、delattr(obj,name) 刪除對象obj中的name屬性,delattr(x,'y')等同于del x.y
?? ?什么是運(yùn)算符重載
?? ??? ?讓自定義的類生成的對象(實例)能夠使用運(yùn)算符進(jìn)行操作
?? ?作用:
?? ??? ?1、讓自定義的類的實例像內(nèi)建對象一樣運(yùn)行運(yùn)算符操作
?? ??? ?2、讓程序簡潔易讀
?? ??? ?3、對自定義的對象,將運(yùn)算符賦予新的運(yùn)算規(guī)則
算術(shù)運(yùn)算符的重載:
?? ?__add__(self, rhs)?? ??? ??? ?self +? rhs?? ??? ??? ? 加法
?? ?__sub__(self, rhs)?? ??? ??? ?self -? rhs?? ??? ??? ? 減法
?? ?__mul__(self, rhs)?? ??? ??? ?self *? rhs?? ??? ??? ? 乘法
?? ?__truediv__(self, rhs)?? ??? ?self /? rhs?? ??? ??? ? 除法
?? ?__floordiv__(self, rhs)?? ??? ?self // rhs?? ??? ??? ? 地板出法
?? ?__mod__(self, rhs)?? ??? ??? ?self %? rhs?? ??? ??? ? 求余
?? ?__pow__(self, rhs)?? ??? ??? ?self ** rhs?? ??? ??? ? 冪運(yùn)算
?? ?注意:rhs(right hands side )右手邊
?? ?當(dāng)左手邊的類型為內(nèi)建類型,右手邊為自定義類型時,要實現(xiàn)運(yùn)算必須用以下方法重載
?? ?__radd__(self, lhs)?? ??? ??? ?lhs +? self?? ??? ??? ? 加法
?? ?__rsub__(self, lhs)?? ??? ??? ?lhs -? self?? ??? ??? ? 減法
?? ?__rmul__(self, lhs)?? ??? ??? ?lhs *? self?? ??? ??? ? 乘法
?? ?__rtruediv__(self, lhs)?? ??? ?lhs /? self?? ??? ??? ? 除法
?? ?__rfloordiv__(self, lhs)?? ?lhs // self?? ??? ??? ? 地板出法
?? ?__rmod__(self, lhs)?? ??? ??? ?lhs %? self?? ??? ??? ? 求余
?? ?__rpow__(self, lhs)?? ??? ??? ?lhs ** self?? ??? ??? ? 冪運(yùn)算
?? ?__iadd__(self, rhs)?? ??? ??? ?self +=? rhs?? ??? ??? ? 加法
?? ?__isub__(self, rhs)?? ??? ??? ?self -=? rhs?? ??? ??? ? 減法
?? ?__imul__(self, rhs)?? ??? ??? ?self *=? rhs?? ??? ??? ? 乘法
?? ?__itruediv__(self, rhs)?? ??? ?self /=? rhs?? ??? ??? ? 除法
?? ?__ifloordiv__(self, rhs)?? ?self //= rhs?? ??? ??? ? 地板出法
?? ?__imod__(self, rhs)?? ??? ??? ?self %=? rhs?? ??? ??? ? 求余
?? ?__ipow__(self, rhs)?? ??? ??? ?self **= rhs?? ??? ??? ? 冪運(yùn)算
比較運(yùn)算符的重載:
?? ?__lt__(self,rhs)?? ??? ??? ?self <?? rhs?? ??? ??? ? 小于
?? ?__le__(self,rhs)?? ??? ??? ?self <=? rhs?? ??? ??? ? 小于等于
?? ?__gt__(self,rhs)?? ??? ??? ?self >?? rhs?? ??? ??? ? 大于
?? ?__ge__(self,rhs)?? ??? ??? ?self >=? rhs?? ??? ??? ? 大于等于
?? ?__eq__(self,rhs)?? ??? ??? ?self ==? rhs?? ??? ??? ? 等于
?? ?__ne__(self,rhs)?? ??? ??? ?self !=? rhs?? ??? ??? ? 不等于
?? ?注:比較運(yùn)算符通常返回True 或 False
?? ??? ?lt:less than??????? le:less or equal
?? ??? ?gt:greater than?? ??? ?gt:gerater or equl
?? ??? ?eq:equal?? ??? ??? ?ne:not equal
位運(yùn)算符重載:
?? ?__invert__(self)?? ??? ??? ?~ self?? ??? ??? ??? ??? ?取反(一元運(yùn)算符)
?? ?__and__(self,rhs)?? ??? ??? ?self? & rhs?? ??? ??? ??? ?位與
?? ?__or__(self,rhs)?? ??? ??? ?self? | rhs?? ??? ??? ??? ?位或
?? ?__xor__(self,rhs)?? ??? ??? ?self? ^ rhs?? ??? ??? ??? ?位異或
?? ?__lshift__(self,rhs)?? ??? ?self? << rhs?? ??? ??? ?左移
?? ?__rshift__(self,rhs)?? ??? ?self? >> rhs?? ??? ??? ?右移
反向位運(yùn)算符重載:
?? ?__rand__(self,lhs)?? ??? ??? ?lhs? & self?? ??? ??? ??? ?位與
?? ?__ror__(self,lhs)?? ??? ??? ?lhs? | self?? ??? ??? ??? ?位或
?? ?__rxor__(self,lhs)?? ??? ??? ?lhs? ^ self?? ??? ??? ??? ?位異或
?? ?__rlshift__(self,lhs)?? ??? ?lhs << self?? ??? ??? ??? ?左移
?? ?__rrshift__(self,lhs)?? ??? ?lhs >> self?? ??? ??? ??? ?右移
?? ?注:當(dāng)左手邊的類型為內(nèi)建類型,右手邊為自定義類型時,使用反向位運(yùn)算符重載
復(fù)合賦值位運(yùn)算符:
?? ?__iand__(self,lhs)?? ??? ??? ?lhs? &= self?? ??? ??? ??? ?位與
?? ?__ior__(self,lhs)?? ??? ??? ?lhs? |= self?? ??? ??? ??? ?位或
?? ?__ixor__(self,lhs)?? ??? ??? ?lhs? ^= self?? ??? ??? ??? ?位異或
?? ?__ilshift__(self,lhs)?? ??? ?lhs <<= self?? ??? ??? ??? ?左移
?? ?__irshift__(self,lhs)?? ??? ?lhs >>= self?? ??? ??? ??? ?右移
一元運(yùn)算符的重載:
?? ?__neg__(self)?? ??? ??? ??? ?- self?? ??? ??? ??? ??? ??? ?負(fù)號
?? ?__pos__(self)?? ??? ??? ??? ?+ self?? ??? ??? ??? ??? ??? ?正號
?? ?__invert__(self)?? ??? ??? ?~ self?? ??? ??? ??? ??? ??? ?取反
?? ?一元運(yùn)算符的重載方法:
?? ??? ?class 類名:
?? ??? ??? ?def __XXX__(self):
?? ??? ??? ??? ?....
?? ?運(yùn)算符重載不能改變運(yùn)算符的優(yōu)先級
python類名最好用駝峰命名法:
?? ?MyList?? MyRange?? ??? ?大駝峰(所有單詞首字母大寫,其余小寫)
?? ?getStudentAge?? ??? ??? ?小駝峰(第一個單詞首字母小寫,其他首字母大寫)
in /not in 運(yùn)算符的重載:
?? ?重載方法:
?? ??? ?def __contanins__(self,e)?? ??? ?e in self???? 成員運(yùn)算
?? ?__getitem__(self,i)?? ??? ?x = self[i]?? ??? ?索引和切片取值
?? ?__setitem__(self,i,v)?? ?self[i] = v???? 索引和切片賦值
?? ?__delitem__(self,i)?? ??? ?del self[i]?? ??? ?del 語句刪除索引
?? ?作用:讓自己定義的類型的對象能夠支持索引和切片操作
slice函數(shù):
?? ?作用:用于創(chuàng)建一個Slice切片對象,此對象存儲一個切片的起始值,終止值和步長信息
?? ?slice(start,stop=None,step=None) 創(chuàng)建一個切片對象
?? ?slice的對象的屬性:
?? ??? ?s.start?? ??? ??? ??? ?切片的起始值,默認(rèn)為None
?? ??? ?s.stop?? ??? ??? ??? ?切片的終止值,默認(rèn)為None
?? ??? ?s.step?? ??? ??? ??? ?切片的步長,默認(rèn)為None總結(jié)
- 上一篇: python day-15 匿名函数
- 下一篇: Mac python3.x使用HTMLT