property裝飾器的個人想法

2021-08-19 20:25:35 字數 1698 閱讀 7516

今天發現了乙個在python中用來使變數轉變為常量的裝飾器,下面我展示下實現這個功能**。

class mymath(object):

def __init__(self):

self.__pi = "3.1415926"

@property

def pi(self):

return self.__pi

math = mymath()

print(math.pi) # 常量這個不能讓別人修改的值

一般我們要想外部不能訪問,都會給屬性加上私有屬性,只能夠訪問到,但不能被修改,這就是常量。現在我們在方法上面新增了乙個裝飾器@property,再把math.pi()的括號去掉,就變成了一種特殊的呼叫手段,只要用了這個呼叫手段,用了函式就不需要寫括號了。這個也就是常量了。

class mymath(object):

def __init__(self):

self.__pi = 3.1415926

@property

def pi(self):

return self.__pi

@pi.setter

def set_pi(self, new_pi):

self.__pi = new_pi

@pi.deleter

def del_pi(self):

print("del")

del self.__pi

math = mymath()

print(math.pi) # 常量這個不能讓別人修改的值

# math.set_pi(3.1415926535)

math.set_pi = 3.141592653523

del math.del_pi

print(math.pi)

下面在讓我們來看看這段**中改pi函式的屬性,這裡用到的是在方法上加乙個屬性@pi.setter,之後呼叫函式就可以直接賦值,而不用加括號了。但是要具體的改函式的值還要靠self.__pi = new_pi 這句**去修改。以此類推,@pi.deleter就是刪除

屬性了。

再讓我們來看看@property的另一種實現方式:

class mymath(object):

def __init__(self):

self.__pi = 3.1415926

self.name = "oldyang"

def get_pi(self):

return self.__pi

def set_pi(self, new_pi):

self.__pi = new_pi

def del_pi(self):

print("del")

del self.__pi

pi = property(get_pi, set_pi, del_pi) # 這個就是使用property類去替換我們的@property

math = mymath()

print(math.pi) # 常量這個不能讓別人修改的值

# math.set_pi(3.1415926535)

math.pi = 3.141592653523

del math.pi

print(math.pi)

這就是將上面的裝飾器替換成property類的方式。

內建裝飾器 property

使用 property 閱讀 4164 內建裝飾器 property的基本功能就是把類中的方法當作屬性來訪問 在繫結屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查引數,導致可以把成績隨便改 s student s.score 9999這顯然不合邏輯。為了限制score的範圍,...

property裝飾器詳解

property裝飾器,看了好幾個教程都不太理解,知道發現了知乎的這篇好文python property的介紹與使用,終於懂了!下面結合github上的乙個例子,解釋一下這個裝飾器 class person object def init self,name,age 初始化 self.name na...

物件property裝飾器

class people def init self,name self.name name property defname self obj1.name return self.name name.setter defname self,val obj1.name egon iftype val...