@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 三 類變數 類變數在整個例項化的物件中是公用的。類變數定義在類...