新聞中心
簡(jiǎn)述python面向?qū)ο缶幊讨泻瘮?shù)重載和重寫(xiě)的區(qū)別
這個(gè)基本是沒(méi)有一點(diǎn)關(guān)聯(lián)。。。只是名字容易混淆而已 重寫(xiě)就是對(duì)父類的方法重寫(xiě),改變方法體中的語(yǔ)句。。。。 重載就是同一個(gè)函數(shù)名,參數(shù)個(gè)數(shù)、類型、排列順序不同,jvm根據(jù)參數(shù)來(lái)決定調(diào)用哪一個(gè)方法
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)岷縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
python怎么重寫(xiě)集合方法
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自定義的類,為什么需要重寫(xiě)
首先,自定義的類在不繼承任何基類的情況下,也具有__str__屬性:
[python] view plain copy
class RoundFloatManual(object):
... def __init__(self, val):
... assert isinstance(val, float), \
... "Value must be a float!"
... self.value = round(val, 2)
rfm = RoundFloatManual(5.590464)
dir(rfm)
返回:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value']
__str__ 是 Python 類中的特殊方法,他的回傳值就是使用 str(x) 所得到的值, 而 print(x) 其實(shí)就等於是print(str(x)).其實(shí)再講細(xì)一點(diǎn),當(dāng)我們呼叫 str(x) 的時(shí)候其實(shí)是呼叫x.__str__()
也就是說(shuō)我們可以這樣想像:
print(x) === print(str(x)) === print(x.__str__())
一般我們 自定義的類,__str__ 方法的回傳值是默認(rèn)的字串,比如說(shuō): __main__.Mylist object at 0x0071A470 用以說(shuō)明 namespace, class name 和位置.如果要改變__str__ 的回傳值,我們必須要覆寫(xiě)他.
python函數(shù)里定義的類
#Python 2.5
#這個(gè)可以用修飾器來(lái)完成
#但是一般不會(huì)限制參數(shù)類型
#給你個(gè)思路:
def argfilter(*types):
def deco(func): #這是修飾器
def newfunc(*args): #新的函數(shù)
if len(types)==len(args):
correct = True
for i in range(len(args)):
if not isinstance(args[i], types[i]): #判斷類型
correct = False
if correct:
return func(*args) #返回原函數(shù)值
else:
raise TypeError
else:
raise TypeError
return newfunc #由修飾器返回新的函數(shù)
return deco #返回作為修飾器的函數(shù)
@argfilter(int, str) #指定參數(shù)類型
def func(i, s): #定義被修飾的函數(shù)
print i, s
#之后你想限制類型的話, 就這樣:
#@argfilter(第一個(gè)參數(shù)的類名, 第二個(gè)參數(shù)的類名, ..., 第N個(gè)參數(shù)的類名)
#def yourfunc(第一個(gè)參數(shù), 第一個(gè)參數(shù), ..., 第N個(gè)參數(shù)):
# ...
#
#相當(dāng)于:
#def yourfunc(第一個(gè)參數(shù), 第一個(gè)參數(shù), ..., 第N個(gè)參數(shù)):
# ...
#yourfunc = argfilter(第一個(gè)參數(shù)的類名, 第二個(gè)參數(shù)的類名, ..., 第N個(gè)參數(shù)的類名)(yourfunc)
python中將函數(shù)和變量封裝成類的好處
封裝成類的好處,總結(jié)歸納有2個(gè):一個(gè)是保護(hù)隱私,一個(gè)是降低程序復(fù)雜度
python類方法重寫(xiě)
從父類繼承中的方法,如果不滿足程序的需求,就需要重寫(xiě)。
方法重寫(xiě)指的是在子類中自定義實(shí)現(xiàn)父類中的同名方法。
分享標(biāo)題:python函數(shù)重寫(xiě)為類,python函數(shù)重命名
文章轉(zhuǎn)載:http://ef60e0e.cn/article/hdggjs.html