新聞中心
python的三大特征
第一點(diǎn):封裝
創(chuàng)新互聯(lián)公司是一家專業(yè)提供建始企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、HTML5、小程序制作等業(yè)務(wù)。10年已為建始眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式,在Python中用雙下線開頭的方式將屬性設(shè)置成私有的。
擁有三個(gè)好處:將變化隔離,便于使用,提高復(fù)用性,提高安全性。
第二點(diǎn):繼承
繼承是一種創(chuàng)建新類的方式,在Python中,新建的類可以繼承一個(gè)或多個(gè)父類,父類又被稱為基類或超類,新建的類稱為派生類或子類。即一個(gè)派生類繼承基類的字段和方法,繼承也允許把一個(gè)派生類的對(duì)象作為一個(gè)基類對(duì)象對(duì)待。
第三點(diǎn):多態(tài)
一種事物的多種體現(xiàn)形式,函數(shù)的重寫其實(shí)就是多態(tài)的一種體現(xiàn)。Python中,多態(tài)指是父類的引用指向子類的對(duì)象。
實(shí)現(xiàn)多態(tài)的步驟:
1. 定義新的子類;
2. 重寫對(duì)應(yīng)的父類方法;
3. 使用子類的方法直接處理,不調(diào)用父類的方法;
多態(tài)的好處:
1. 增加了程序的靈活性;
2. 增加了程序的可擴(kuò)展性。
Python中的面向?qū)ο螅ǜ呒?jí))之私有方法、多繼承、多態(tài)
特征:私有屬性與私有方法不能從外部被調(diào)用,也不能被子類繼承
唯一寫法:在屬性或方法前面加上__(兩個(gè)下劃線)
我們寫一個(gè)簡(jiǎn)單的例子,創(chuàng)建一個(gè)類,包含私有方法、私有屬性、普通方法、普通屬性,并生成一個(gè)實(shí)例
私有屬性和私有方法可以從內(nèi)部被調(diào)用(總不能我寫了,但是哪都不讓用吧)
我們?cè)囋囋陬惱镌偌尤胍粋€(gè)新的方法,調(diào)用私有方法和屬性
可以看到,私有屬性和私有方法是可以在類內(nèi)部被調(diào)用的。
舉個(gè)私有屬性應(yīng)用場(chǎng)景的例子
二。object類
我們?cè)囈幌?/p>
三。多繼承
一個(gè)子類可以繼承多個(gè)父類,用逗號(hào)隔開
多個(gè)父類中有同名方法時(shí),按照繼承順序進(jìn)行調(diào)用
四。多態(tài)
當(dāng)不同的實(shí)例,有同名的方法時(shí),我們可以一個(gè)函數(shù),傳入不同的實(shí)例,執(zhí)行對(duì)應(yīng)的方法。
我們定義一個(gè)貓和一個(gè)狗的類,兩個(gè)類中都有'叫'的方法。并各生成一個(gè)實(shí)例。
定義一個(gè)函數(shù),用函數(shù)來(lái)調(diào)用'叫'的方法
這就叫多態(tài)。
python中_,__和__X__的區(qū)別與作用
x:表示該函數(shù)或該成員變量屬于類私有,不允許外部調(diào)用
x :表示一個(gè)變量的名字,只不過單獨(dú)的x被python內(nèi)部認(rèn)為是關(guān)鍵字了,已經(jīng)被占用,所以用x_表示一個(gè)新的變量名.
表示這是該類獨(dú)有的函數(shù),不允許子類重寫
只能在類內(nèi)部調(diào)用
前后都有雙下劃線,說(shuō)明它是用于Python調(diào)用的
更多內(nèi)容請(qǐng)戳
python怎么重寫集合方法
class Set(object):
def __init__(self,data=None):
if data == None:
self.__data = []
else:
if not hasattr(data,'__iter__'):
#提供的數(shù)據(jù)不可以迭代,實(shí)例化失敗
raise Exception('必須提供可迭代的數(shù)據(jù)類型')
temp = []
for item in data:
#集合中的元素必須是可哈希
hash(item)
if not item in temp:
temp.append(item)
self.__data = temp
#析構(gòu)函數(shù)
def __del__(self):
del self.__data
#添加元素,要求元素必須可哈希
def add(self, other):
hash(other)
if other not in self.__data:
self.__data.append(other)
else:
print('元素已存在,操作被忽略')
#刪除元素
def remove(self,other):
if other in self.__data:
self.__data.remove(other)
print('刪除成功')
else:
print('元素不存在,刪除操作被忽略')
#隨機(jī)彈出并返回一個(gè)元素
def pop(self):
if not self.__dat:
print('集合已空,彈出操作被忽略')
return
import random
item = random.choice(self.__data)
self.__data.remove(item)
return item
#運(yùn)算符重載,集合差集運(yùn)算
def __sub__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
#空集合
result = Set()
#如果一個(gè)元素屬于當(dāng)前集合而不屬于另一個(gè)集合,添加
for item in self.__data:
if item not in other.__data:
result.__data.append(item)
return result
#提供方法,集合差集運(yùn)算,復(fù)用上面的代碼
def difference(self,other):
return self - other
#|運(yùn)算符重載,集合并集運(yùn)算
def __or__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
result = Set(self.__data)
for item in other.__data:
if item not in result.__data:
result.__data.append(item)
return result
#提供方法,集合并集運(yùn)算
def union(self,otherSet):
return self | otherSet
#運(yùn)算符重載,集合交集運(yùn)算
def __and__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
result = Set()
for item in self.__data:
if item in other.__data:
result.__data.append(item)
return result
#^運(yùn)算符重載,集合對(duì)稱差集
def __xor__(self, other):
return (self-other) | (other-self)
#提供方法,集合對(duì)稱差集運(yùn)算
def symetric_difference(self,other):
return self ^ other
#==運(yùn)算符重載,判斷兩個(gè)集合是否相等
def __eq__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
if sorted(self.__data) == sorted(other.__data):
return True
return False
#運(yùn)算符重載,集合包含關(guān)系
def __gt__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
if self != other:
flag1 = True
for item in self.__data:
if item not in other.__data:
#當(dāng)前集合中有的元素不屬于另一個(gè)集合
flag1 = False
break
flag2 = True
for item in other.__data:
if item not in self.__data:
#另一集合中的元素不屬于當(dāng)前集合
flag2 = False
break
if not flag1 and flag2:
return True
return False
#=運(yùn)算符重載,集合包含關(guān)系
def __ge__(self, other):
if not isinstance(other,Set):
raise Exception('類型錯(cuò)誤')
return self == other or self other
#提供方法,判斷當(dāng)前集合是否為另一個(gè)集合的真子集
def issubset(self,other):
return selfother
#提供方法,判斷當(dāng)前集合是否為另一集合的超集
def issuperset(self,other):
return self other
#提供方法,清空集合所有元素
def clear(self):
while self.__data:
del self.__data[-1]
print('集合已清空')
#運(yùn)算符重載,使得集合可迭代
def __iter__(self):
return iter(self.__data)
#運(yùn)算符重載,支持in運(yùn)算符
def __contains__(self, item):
return item in self.__data
#支持內(nèi)置函數(shù)len()
def __len__(self):
return len(self.__data)
#直接查看該類對(duì)象時(shí)調(diào)用該函數(shù)
def __repr__(self):
return '{'+str(self.__data)[1:-1]+'}'
#使用print()函數(shù)輸出該類對(duì)象時(shí)調(diào)用該函數(shù)
__str__ = __repr__
python修改第三方庫(kù)重寫
1、更換anaconda源,使用清華大學(xué)鏡像:清華大學(xué)鏡像。
2、更換pip源,在python安裝目錄的bin目錄下運(yùn)行。
3、設(shè)置pip鏡像源環(huán)境,保存即配置好了pip鏡像源,即可完成重寫。
python 重載和重寫的區(qū)別
重載和重寫,這是兩個(gè)新概念,是兩個(gè)令我們?nèi)菀谆煜母拍?。方法重載(overloading method)
是在一個(gè)類里面,方法名字相同,而參數(shù)不同。返回類型呢?可以相同也可以不同。方法重寫(overiding method)
子類不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的
一種手段。Java的方法重載,就是在類中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。調(diào)用方法時(shí)通過傳遞給它們的不同個(gè)數(shù)和
類型的參數(shù)來(lái)決定具體使用哪個(gè)方法,
這就是多態(tài)性。方法重寫:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時(shí)子類并不想原封不動(dòng)地繼承父類的方法,而是想作一定
的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。
若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法。
如需父類中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當(dāng)前類的父類重寫方法的規(guī)則:
參數(shù)列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載.訪問修飾符的限制一定要大于被重寫方法的訪問修飾符
(publicprotecteddefaultprivate)重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉?/p>
泛的檢查型異常.例如,父類的一個(gè)方法申明了一個(gè)檢查異常IOException,在重寫這個(gè)方法是就不能拋出Exception,只能拋出
IOException的子類異常,可以拋出非檢查異常.重載的規(guī)則:必須具有不同的參數(shù)列表;可以有不同的返回類型,只要參數(shù)列表不同就可以
了;可以有不同的訪問修飾符;可以拋出不同的異常;注意,Java的方法重載要求同名的方法必須有不同的參數(shù)表,僅有返回類型不同是不足以區(qū)分兩
個(gè)重載的方法。重寫方法只能存在于具有繼承關(guān)系中,重寫方法只能重寫父類非私有的方法。下面分別舉一個(gè)例子來(lái)說(shuō)明方法重載:public class
TestOverLoad{ public static void main(String[] args) {Test test = new
Test(); test.print(null); } }class Test{ public void print(String
some){System.out.println("String version print"); } public void
print(Object some){ System.out.println("Object version print");
}}該程序輸出的結(jié)果是String version print。
本文標(biāo)題:python私有函數(shù)重寫的簡(jiǎn)單介紹
當(dāng)前URL:http://fisionsoft.com.cn/article/docisss.html