扣丁學堂Python培訓分享Python中@property的使用

今天有小夥伴遇到一個問題,那就是Python中@property的使用,今天扣丁學堂Python培訓小編整理一下分享給大家,對Python中@property的使用感興趣或者不甚瞭解的小夥伴就隨小編來看一下吧,希望對小夥伴們有所幫助。

問題如下:

    class TVshow:

a =['戰狼','紅樓夢','西遊記','亮劍']

def __init__(self,show):

self.show = show

@property

def show(self):

return self.show

@show.setter

def show(self,vloue):

if vloue in self.a:

self.show = '您選澤的:《'+vloue+'》,稍後將播放'

else:

self.show = '您點播的電影不存在'

tvshow=TVshow('戰狼')

print('正在播放:《',tvshow.show,'》')

print('您可以從',TVshow.a,'中選澤要點播的電影')

tvshow.show='紅樓夢'

print(tvshow.show)

#運行結果

Traceback (most recent call last):

......

[Previous line repeated 492 more times]

RecursionError: maximum recursion depth exceeded

#超過最大遞歸深度

Process finished with exit code 1

報錯了,經過改正後的代碼如下:

class TVshow:

a =['戰狼','紅樓夢','西遊記','亮劍']

def __init__(self,show):

self._show = show

@property

def show(self):

return self._show

@show.setter

def show(self,vloue):

if vloue in self.a:

self._show = '您選澤的:《'+vloue+'》,稍後將播放'

else:

self._show = '您點播的電影不存在'

tvshow=TVshow('戰狼')

print('正在播放:《',tvshow._show,'》')

print('您可以從',TVshow.a,'中選澤要點播的電影')

tvshow.show='紅樓夢'

print(tvshow.show)

#運行結果

正在播放:《 戰狼 》

您可以從 ['戰狼', '紅樓夢', '西遊記', '亮劍'] 中選澤要點播的電影

您選澤的:《紅樓夢》,稍後將播放

Process finished with exit code 0

想不到吧,一個小小的下劃線竟然是罪魁禍首。不過還是不能理解,爲什麼報錯會報循環超出最大深度的錯,又查找了一番資料,才發現我對@property 這個裝飾器一點也不理解。

@property的作用是把一個getter方法變成屬性,@xxxx.setter把setter方法變成屬性賦值,讓get和set方法更好用。

[當方法名與屬性名一致時,類屬性的下劃線不能少,否則,會報錯,原因在於:如果不加下劃線出現self.show時就會繼續調用此類的getter方法出現死循環。這個是我們需要注意的]

#必須保證兩個xxxx方法名與@xxxx.setter一致,但是不能與將要輸出的屬性名相同

class TVshow:

a =['戰狼','紅樓夢','西遊記','亮劍']

def __init__(self,show):

self.show = show

@property

def sxshow(self):

return self.show

@sxshow.setter

def sxshow(self,vloue):

if vloue in self.a:

self.show = '您選澤的:《'+vloue+'》,稍後將播放'

else:

self.show = '您點播的電影不存在'

tvshow=TVshow('戰狼')

print('正在播放:《',tvshow.show,'》')

print('您可以從',TVshow.a,'中選澤要點播的電影')

tvshow.show='紅樓夢'

print(tvshow.show)

#運行結果

正在播放:《 戰狼 》

您可以從 ['戰狼', '紅樓夢', '西遊記', '亮劍'] 中選澤要點播的電影

紅樓夢

Process finished with exit code 0

以上就是扣丁學堂Python在線學習小編給大家分享的Python中@property的使用,希望對小夥伴們有所幫助,想要了解更多內容的小夥伴可以登錄扣丁學堂官網諮詢。

想要學好Python開發小編給大家推薦口碑良好的扣丁學堂,扣丁學堂有專業老師制定的Python學習路線圖輔助學員學習,此外還有與時俱進的Python課程體系和Python視頻教程供大家學習,想要學好Python開發技術的小夥伴快快行動吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章