日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python属性和内建属性

發(fā)布時(shí)間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python属性和内建属性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

屬性property

1. 私有屬性添加getter和setter方法

class Money(object):def __init__(self):self.__money = 0def getMoney(self):return self.__moneydef setMoney(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型數(shù)字")

2. 使用property升級(jí)getter和setter方法

''' 遇到問(wèn)題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class Money(object):def __init__(self):self.__money = 0def getMoney(self):return self.__moneydef setMoney(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型數(shù)字")money = property(getMoney, setMoney)

運(yùn)行結(jié)果:

In [1]: from get_set import MoneyIn [2]: In [2]: a = Money()In [3]: In [3]: a.money Out[3]: 0In [4]: a.money = 100In [5]: a.money Out[5]: 100In [6]: a.getMoney() Out[6]: 100

3. 使用property取代getter和setter方法

@property成為屬性函數(shù),可以對(duì)屬性賦值時(shí)做必要的檢查,并保證代碼的清晰短小,主要有2個(gè)作用

將方法轉(zhuǎn)換為只讀
重新實(shí)現(xiàn)一個(gè)屬性的設(shè)置和讀取方法,可做邊界判定

''' 遇到問(wèn)題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class Money(object):def __init__(self):self.__money = 0@propertydef money(self):return self.__money@money.setterdef money(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型數(shù)字")

運(yùn)行結(jié)果

In [3]: a = Money()In [4]: In [4]: In [4]: a.money Out[4]: 0In [5]: a.money = 100In [6]: a.money Out[6]: 100

內(nèi)建屬性

"teachclass.py"class Person(object):pass

python3.5中類的內(nèi)建屬性和方法

經(jīng)典類(舊式類),早期如果沒有要繼承的父類,繼承里空著不寫的類

#py2中無(wú)繼承父類,稱之經(jīng)典類,py3中已默認(rèn)繼承object class Person:pass

子類沒有實(shí)現(xiàn)__init__方法時(shí),默認(rèn)自動(dòng)調(diào)用父類的。 如定義__init__方法時(shí),需自己手動(dòng)調(diào)用父類的__init__方法

__getattribute__例子:

''' 遇到問(wèn)題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class Itcast(object):def __init__(self,subject1):self.subject1 = subject1self.subject2 = 'cpp'#屬性訪問(wèn)時(shí)攔截器,打logdef __getattribute__(self,obj):if obj == 'subject1':print('log subject1')return 'redirect python'else: #測(cè)試時(shí)注釋掉這2行,將找不到subject2return object.__getattribute__(self,obj)def show(self):print('this is Itcast')s = Itcast("python") print(s.subject1) print(s.subject2)

運(yùn)行結(jié)果:

log subject1 redirect python cpp

__getattribute__的坑

''' 遇到問(wèn)題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class Person(object):def __getattribute__(self,obj):print("---test---")if obj.startswith("a"):return "hahha"else:return self.testdef test(self):print("heihei")t.Person()t.a #返回hahhat.b #會(huì)讓程序死掉#原因是:當(dāng)t.b執(zhí)行時(shí),會(huì)調(diào)用Person類中定義的__getattribute__方法,但是在這個(gè)方法的執(zhí)行過(guò)程中#if條件不滿足,所以 程序執(zhí)行else里面的代碼,即return self.test 問(wèn)題就在這,因?yàn)閞eturn 需要把#self.test的值返回,那么首先要獲取self.test的值,因?yàn)閟elf此時(shí)就是t這個(gè)對(duì)象,所以self.test就是#t.test 此時(shí)要獲取t這個(gè)對(duì)象的test屬性,那么就會(huì)跳轉(zhuǎn)到__getattribute__方法去執(zhí)行,即此時(shí)產(chǎn)#生了遞歸調(diào)用,由于這個(gè)遞歸過(guò)程中 沒有判斷什么時(shí)候推出,所以這個(gè)程序會(huì)永無(wú)休止的運(yùn)行下去,又因?yàn)?/span>#每次調(diào)用函數(shù),就需要保存一些數(shù)據(jù),那么隨著調(diào)用的次數(shù)越來(lái)越多,最終內(nèi)存吃光,所以程序 崩潰## 注意:以后不要在__getattribute__方法中調(diào)用self.xxxx

總結(jié)

以上是生活随笔為你收集整理的Python属性和内建属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。