python中的 property裝飾器

2021-09-09 05:48:03 字數 1499 閱讀 1813

1、@property 內建裝飾器函式,把乙個方法呼叫方式變成屬性呼叫方式。(將乙個方法當成乙個屬性使用)。注意@property裝飾器只能在物件導向中使用。

2、訪問使用@property裝飾器裝飾的函式可以直接呼叫函式名

(會執行一段功能(函式)然後返回值)

3、@property 裝飾器只能修飾不帶引數的方法。

4、@property裝飾器修飾私有方法的getter和setter方法。和控制屬性的訪問許可權-唯讀。

from math import pi

class circle:

def __init__(self, r):

self.r = r

@property

def perimeter(self):

return 2 * pi * self.r

@property

def area(self):

return pi * self.r ** 2

c1 = circle(5)

print(c1.perimeter)

print(c1.area)

如上**所示,如果不使用@property的話,那麼print(c1.perimeter)就應該是print(c1.perimeter()),area同理。即,周長面積這種引數應該被當作變數來使用,而不是函式。

class person:

def __init__(self, name, age):

self.__name = name

self.__age = age # self.__age就是乙個私有屬性,物件就不能使用了

@property

def name(self):

return self.__name

@property

def age(self, age):

return self.__age

# @property修飾的方法名稱是xx,這裡就@xx.setter

# @age.setter是property的副產品

@age.setter

def age(self, age):

if age < 0 and age > 150:

print('不合法啊,superboy')

return

self.__age = age

def __str__(self):

msg = '姓名:{},年齡:{}'.format(self.__name, self.__age)

return msg

per = person('zs', 10)

print(per)

per.age = 16

print(per)

print(per.name)

輸出為:

姓名:zs,年齡:10

姓名:zs,年齡:16

zs

JS中Attribute和property的區別

在使用angular中的資料繫結時,發現對html屬性和dom屬性不是很清楚,順便屢屢清楚這二者的區別。attribute html屬性,書寫在標籤內的屬性,使用setattribute 和getattribute 進行設定和獲取。property dom屬性,html標籤對應的dom節點屬性,使用...

Python 今天抽空學習了 Property

1 property使方法像屬性一樣呼叫 property可以把乙個例項方法變成其同名屬性,以支援.號訪問,它亦可標記設定限制,加以規範 2 property成為屬性函式,可以對屬性賦值時做必要的檢查,比如在setter方法裡加過濾判斷條件。3 顯得相對簡潔一些,相比自定義的get和set方法,pr...

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...