类特性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)
python 学习汇总62:class类特性property(初级学习- tcy)
猜你喜欢
转载自blog.csdn.net/tcy23456/article/details/84262828
今日推荐
周排行