在實際物件導向程式設計的過程中,例項物件的屬性通常都有一定的儲存邏輯。例如,學校管理系統中,學生的資訊管理。我們需要記錄學生的姓名,年齡,各科的成績。然後還要根據各科的來判斷該學生是否能夠正常畢業。定義乙個學生類可以這樣:
class student(object):
def __init__(self,name,age,grades):
self.name = name
self.age =age
self.grades =grades
def graduate(self):
if self.grades >=
60: print
("允許畢業"
)else:
print
("留級檢視"
)
但這樣似乎不是很合理,因為像年齡,學習成績這些應該都是正整數,當我們錄入這些資訊的時候可能會出錯。為了防止這種情況的發生,我們必須對age和grades進行限制。
最常用的就是get()和set()方法
1 不能通過"."直接訪問屬性,需要將屬性私有化,python中的做法是在屬性前加雙下劃線
2 提供get()和set()方法,以限制儲存規則
如下:
class student(object):
def __init__(self,name,age,grades):
self.__name = name
self.__age =age
self.__grades =grades
def get_name(self):
return self.__name
def set_name(self,name):
self.__name = name
def get_age(self):
return self.__age
def set_age(self, age):
if isinstance(age,
int)
and age >
0: self.__age = age
def get_grades(self):
return self.__grades
def set_grades(self, grades):
if isinstance(grades,
int)
and grades >
0: self.__grades = grades
def graduate(self):
if self.grades >=
60: print
("允許畢業"
)else:
print
("留級檢視"
)
這樣寫我們就age和grades儲存的合理性 ,但也存在一些弊端:
class student(object):
def __init__(self,name,age,grades):
self.name = name
self.age =age # 呼叫age.setter方法
self.grades =grades
@property
def name(self):
return self.__name
@name.setter
def name(self,name):
self.__name = name
@property
def age(self):
return self.__age
@age.setter
def age(self, age):
if isinstance(age,
int)
and age >
0: self.__age = age
else:
raise valueerror(
"數值輸入異常"
)@property
def grades(self):
return self.__grades
@grades.setter
def grades(self, grades):
if isinstance(grades,
int)
and grades >
0: self.__grades = grades
else:
raise valueerror(
"數值輸入異常"
) def graduate(self):
if self.grades >=
60: print
("允許畢業"
)else:
print
("留級檢視"
)s = student(
"jack",22
,88)s.grades =
33print
(s.grades)
Python類屬性,例項屬性
dreamfor的部落格 1.python類資料屬性 定義在類裡面但在函式外面的變數,它們都是靜態的。一段很簡單的 但反應了很多 class a a 1 乙個類裡面有個屬性a a a b a a.a b.a a.a 這個屬效能被例項和類訪問 a.a 2 b.a a.a 改變例項a的屬性a,例項b和類...
Python 類屬性 例項屬性
1.類的三大要素 類名 屬性 方法 屬性又分為例項屬性和類屬性 1 class tool object 2 屬性3 num 045 方法6def init self,new name 7 self.name new name 寫在 init 中的是例項屬性,也是通過方法定義的,是跟著例項物件的 寫在...
Python 類屬性與例項屬性
python在 init self 方法中定義的屬性為例項屬性,並且python的例項可以動態地增加例項屬性 直接跟在類名後邊定義的屬性都預設是類屬性 類似於c 的static變數 要明白雷和例項都是命名空間。類是類屬性的命名空間,例項則是例項屬性的命名空間。例項屬性能夠在名稱訪問 搜尋 中覆蓋類屬...