python 学习汇总62:class类特性property(初级学习- tcy)

类特性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)




猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84262828
今日推荐