python類中 property的講解與使用

2021-08-25 02:56:51 字數 2447 閱讀 1318

@property可以把乙個例項方法變成其同名屬性,以支援.號訪問,它亦可標記設定限制,加以規範,如下**:

class animal(object):

def __init__(self, name, age):

self._name = name

self._age = age

self._color = 'black'

@property

def name(self):

return self._name

@name.setter

def name(self, value):

if isinstance(value, basestring):

self._name = value

else:

self._name = 'no name'

@property

def age(self):

return self._age

@age.setter

def age(self, value):

if value > 0 and value < 100:

self._age = value

else:

self._age = 0

# print 'invalid age value.'

@property

def color(self):

return self._color

@color.setter

def color(self, value):

self._color = value;

a = animal('black dog', 3)

a.name = 'white dog'

a.age = 300

print 'name:', a.name

print 'age:', a.age

這樣在設定值時候,總算有個判斷取捨,是不是好一些?

私有變數以_開頭,是種編碼約寫,當然也可以直接訪問它。

不過既如此寫,直接訪問是不推薦的。

若真要為私有變數,則加雙下劃線,比如__name,也一樣阻止不了訪問,但讓我們知道,它不想被直接用到,如下**:

class animal(object):

def __init__(self, name):

self.__name = name

a = animal('black dog')

print a._animal__name

property函式

它以乙個函式形式,定義乙個屬性,與@property實現原理類似,或者就是它的的變異用法。

其原型為:

property(fget=none, fset=none, fdel=none, doc=none)
譬如上面animal類,其可用此改為:

class animal(object):

def __init__(self, name, age):

self._name = name

self._age = age

self._color = 'black'

def get_name(self):

return self._name

def set_name(self, value):

if isinstance(value, basestring):

self._name = value

else:

self._name = 'no name'

name = property(fget=get_name, fset=set_name, fdel=none, doc='name of an animal')

def get_age(self):

return self._age

def set_age(self, value):

if value > 0 and value < 100:

self._age = value

else:

self._age = 0

# print 'invalid age value.'

age = property(fget=get_age, fset=set_age, fdel=none, doc='name of an animal')

a = animal('black dog', 3)

a.name = 'white dog'

a.age = 3

print 'name:', a.name

print animal.name.__doc__

print 'age:', a.age

其輸出結果一樣,看來只是寫法不同。

**:

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中的類 一 一 應用場景 如果多個函式中有一些相同的引數時,轉換成物件導向。二 如何建立類 類是用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。class 類名 pass 三 類變數 類變數在整個例項化的物件中是公用的。類變數定義在類...