類的 property 特性

2022-01-14 21:35:35 字數 2759 閱讀 8309

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...