1. 程式人生 > >@property 裝飾器

@property 裝飾器

isp 相同 實例 not student 可能 vol clas ini

property() 函數作用於新式類,返回屬性值。

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        print(get)
        return self._x

    def setx(self, value):
        print(set)
        self._x = value

    def delx(self):
        print(del)
        del self._x

    x 
= property(getx, setx, delx, "I‘m the ‘x‘ property.") # c = C() # c.x = 12 # print(c.x) # del c.x

@property 裝飾器用的最多。把一個方法變成屬性調用,那麽我們在對實例屬性操作的時候,就知道該屬性很可能不是直接暴露的,而是通過getter和setter方法來實現的。

# @property 裝飾器負責把一個方法變成屬性調用

class Student(object):
    # 把一個getter方法變成屬性,只需加上 @property
    @property
    
def score(self): return self._score # 把一個setter方法變成屬性,@fun.setter @score.setter def score(self, value): if not isinstance(value, int): raise ValueError(score must be an interger!) if value < 0 or value > 100: raise ValueError(
score must between 0~100) self._score = value s = Student() s.score = 60 print(s.score)

class Parrot(object):
    def __init__(self):
        self._voltage = 100000

    @property
    def voltage(self):
        """Get the current voltage."""
        return self._voltage

    # setter,deleter,這些額外函數名和property相同
    @voltage.setter
    def voltage(self, value):
        self._voltage = value

    @voltage.deleter
    def voltage(self):
        del self._voltage

參考:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143186781871161bc8d6497004764b398401a401d4cce000
http://www.runoob.com/python/python-func-property.html

@property 裝飾器