Python 管理例項屬性

2021-10-08 01:38:26 字數 2604 閱讀 6160

在實際物件導向程式設計的過程中,例項物件的屬性通常都有一定的儲存邏輯。例如,學校管理系統中,學生的資訊管理。我們需要記錄學生的姓名,年齡,各科的成績。然後還要根據各科的來判斷該學生是否能夠正常畢業。定義乙個學生類可以這樣:

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變數 要明白雷和例項都是命名空間。類是類屬性的命名空間,例項則是例項屬性的命名空間。例項屬性能夠在名稱訪問 搜尋 中覆蓋類屬...