property裝飾器可以用於裝飾類裡面的方法, 讓其偽裝成乙個資料屬性, 也就是在呼叫的時候可以不用加括號
print("小王在跑")
@property # 定義property屬性
def speak(self):
print("李白在說話")
p1= person()
p1.run() # 小王在跑
p1.speak # 李白在說話 (呼叫property屬性)
class person:
def __init__(self):
self.__name= none
#這是setter方法
def set_name(self,name):
print("設定了名字")
self.__name=name
#這是getter方法
def get_name(self):
print("獲取了名字")
return self.__name
# 這是deleter方法
def del_name(self):
print("刪除了名字")
del self.__name
name=property(get_name,set_name,del_name) # 這裡存放的是"name"的所有操作
p1 = person()
p1.name = 'shawn' # 設定了名字 (直接賦值,等同於 p1.set_name('shawn'))
n = p1.name # 獲取了名字 (直接獲取資料 ,等同於 p1.get_name())
print(n) # shawn
del p1.name # 刪除了名字 (刪除屬性)
print(p1.name) # 屬性被刪除了, 再次檢視報錯 : "attributeerror" 沒有該屬性
class person:
def __init__(self):
self.__name= none
@property
def name(self): # 獲取
print("設定了名字")
return self.__name
@name.setter
def name(self,name): # 設定
print("設定名字成功")
self.__name=name
@name.deleter # 刪除
def name(self):
print("刪除了名字")
del self.__name
@name.getter # 獲取
def name(self):
print("檢視了名字並+'哈哈'")
return self.__name + "哈哈"
p1 = person()
p1.name = "shawn" # 設定名字成功
n = p1.name # 檢視了名字並+'哈哈'
print(n) # shawn哈哈
由上面的例子實驗, 我們可以發現乙個問題:@property
下修飾的功能其實是與@name.getter
的功能重複的, 於是我們可以省略@name.getter
不用寫, 其實就是@property
替代了@name.getter
其實上面的示例就是"property"特性與類的封裝的組合使用
import math
class circle:
def __init__(self,radius):
self.__radius = radius
@property
def area(self):
return f"面積"
@property
def perimeter(self):
return f"周長"
c1 = circle(10)
print(c1.area) # 面積:314.1592653589793
print(c1.perimeter) # 周長:62.83185307179586
class person:
def __init__(self,weight,hight):
self.__weight = weight
self.__hight = hight
@property
def bmi(self):
return f"bmi值 : "
p1 = person(56,1.73)
print(p1.bmi) # bmi值 : 18.710949246550168
類的三大特性 封裝以及Property特性
class people def init self,height,weight self.height height self.weight weight property 裝飾器,下面方法的呼叫無需加 defbmi self return self.weight self.height 2 pe...
Object C中的特性 property
簡介 property組合了新的預編譯指令和新的屬性訪問器語法。1 property 表示宣告了物件的乙個屬性。例如 property float smshandling 表示某個類的物件具有了乙個float型別的名為smshandling的屬性。property自動生成了 setsmshandli...
Python 中property 特性的使用方法
import math class circle def init self,radius self.radius radius property def area self return math.pi self.radius 2 property def diameter self return...