Python面向对象之属性
属性的定义和调用
1,定义时,在普通方法的基础上添加@property装饰器
2,定义时,属性仅有一个self参数
3,调用时,无需括号
vim day7-8.py
#!/usr/bin/python # -*- coding:utf-8 -*- class Pager(): def __init__(self,current_page): self.current_page = current_page #代表第几页 self.per_items = 10 #每页显示行数 @property def start(self): #开始的序号 val = (self.current_page - 1) * self.per_items + 1 return val @property def end(self): #结束序号 val = self.current_page * self.per_items return val p = Pager(2) print p.start print p.end
使用以上方法可以根据页数取得需要查询的数据的序号开始和结束值
这里使用属性的方法是为了调用看起来更加合理
取消属性装饰器,调用的时候就要加()
所以以上代码和以下代码的效果的一样的
#!/usr/bin/python # -*- coding:utf-8 -*- class Pager(): def __init__(self,current_page): self.current_page = current_page #代表第几页 self.per_items = 10 #每页显示行数 # @property def start(self): #开始的序号 val = (self.current_page - 1) * self.per_items + 1 return val # @property def end(self): #结束序号 val = self.current_page * self.per_items return val p = Pager(2) print p.start() print p.end()
PS:属性在编程时可能用不上,知道即可
属性有两种表达方式一种是加property装饰器一种是使用property方法
对于新式类不仅仅支持property还支持
vim day7-9.py
#!/usr/bin/python # -*- coding:utf-8 -*- class Goods(object): @property def price(self): print '@property' @price.setter def price(self,value): print '@property.setter' @price.deleter def price(self): print '@property.deleter' obj = Goods() obj.price #自动执行 @property修饰的price方法,并获取方法的返回值 obj.price = 123 #自动执行 @price.setter装饰的price方法,并将123赋值给方法 del obj.price #自动执行 @price.deleter装饰的price方法 ~
PS:知道即可,很少用