python 學習彙總62:class類特性property(初級學習- tcy)
阿新 • • 發佈:2018-11-23
類特性property 2018/8/9 =================================================================== 1.特性只對例項方法有效,對於靜態方法、類方法都無法使用 class Person(object): def get_age(self): #新增類的新屬性 return self._age def set_age(self, value): if not isinstance(value, int): raise ValueError('age must be an integer!') if value < 0 or value > 100: raise ValueError('age must between 0 ~ 100!') self._age = value s = Person() s.set_age(60) # 檢查引數 print(s.get_age() ) #60 ================================================================== class Person(object): @property #getter方法變成屬性@property等同age = property(fget=age) def age(self): return self._age @age.setter #把一個setter方法變成屬性賦值 def age(self, value): if not isinstance(value, int): raise ValueError('age must be an integer!') if value < 0 or value > 100: raise ValueError('age must between 0 ~ 100!') self._age = value s = Person() s.age = 60 # OK,實際轉化為s.set_age(60) print(s.age) # OK,實際轉化為s.get_age() ================================================================== #舊版定義 class foo(object): def getname(self): return self.__name def setname(self,value): if not isinstance(value,str): raise TypeError('must be a str') self.__name=value def delname(self): raise TypeError("Can't delete name") name=property(getname,setname,delname) ================================================================== 2.特性的繼承 2.1.完全重寫父類property #在子類中重新定義一個同名的getter函式,再加上@propety裝飾器即可。 class Student(Person): @property def age(self): return self._age 2.2. 重寫父類property的某些方法 class Girl(Person): @property def age(self): return super().age @age.setter def age(self, value): super(Girl, Girl).age.__set__(self, value)