VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Python基础教程 >
  • python基础教程之python基础(26):类的成员(字段、方法、属性)(2)

本站最新发布   Python从入门到精通|Python基础教程
试听地址  
https://www.xin3721.com/eschool/pythonxin3721/


class Goods(object):
  •  
  • @property
  • def price(self):
  • print '@property'
  •  
  • @price.setter
  • def price(self, value):
  • print '@price.setter'
  •  
  • @price.deleter
  • def price(self):
  • print '@price.deleter'
  •  
  • # ############### 调用 ###############
  • obj = Goods()
  •  
  • obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
  •  
  • obj.price = 123 # 自动执行 @price.setter 修饰的 price 方法,并将 123 赋值给方法的参数
  •  
  • del obj.price # 自动执行 @price.deleter 修饰的 price 方法
  • 注:经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法

    由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

    例子:

    
    
    1. class Goods(object):
    2.  
    3. def __init__(self):
    4. # 原价
    5. self.original_price = 100
    6. # 折扣
    7. self.discount = 0.8
    8.  
    9. @property
    10. def price(self):
    11. # 实际价格 = 原价 * 折扣
    12. new_price = self.original_price * self.discount
    13. return new_price
    14.  
    15. @price.setter
    16. def price(self, value):
    17. self.original_price = value
    18.  
    19. @price.deltter
    20. def price(self, value):
    21. del self.original_price
    22.  
    23. obj = Goods()
    24. obj.price # 获取商品价格
    25. obj.price = 200 # 修改商品原价
    26. del obj.price # 删除商品原价

    3.2.2 静态字段方式

    静态字段方式:创建值为property对象的静态字段

    当使用静态字段的方式创建属性时,经典类和新式类无区别

    
    
    1. class Foo:
    2.  
    3. def get_bar(self):
    4. return 'xhh'
    5.  
    6. BAR = property(get_bar)
    7.  
    8. obj = Foo()
    9. reuslt = obj.BAR # 自动调用get_bar方法,并获取方法的返回值
    10. print reuslt

    property的构造方法中有个四个参数:

    第一个参数是方法名,调用 对象.属性 时自动触发执行方法

    第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法

    第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法

    第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息

    
    
    1. class Foo
    2.  
    3. def get_bar(self):
    4. return 'xhh'
    5.  
    6. # *必须两个参数
    7. def set_bar(self, value):
    8. return return 'set value' + value
    9.  
    10. def del_bar(self):
    11. return 'xhh'
    12.  
    13. BAR property(get_bar, set_bar, del_bar, 'description...')
    14.  
    15. obj = Foo()
    16.  
    17. obj.BAR # 自动调用第一个参数中定义的方法:get_bar
    18. obj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
    19. del Foo.BAR # 自动调用第三个参数中定义的方法:del_bar方法
    20. obj.BAE.__doc__ # 自动获取第四个参数中设置的值:description...

    由于静态字段方式创建属性具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

    实例:

    
    
    1. class Goods(object):
    2.  
    3. def __init__(self):
    4. # 原价
    5. self.original_price = 100
    6. # 折扣
    7. self.discount = 0.8
    8.  
    9. def get_price(self):
    10. # 实际价格 = 原价 * 折扣
    11. new_price = self.original_price * self.discount
    12. return new_price
    13.  
    14. def set_price(self, value):
    15. self.original_price = value
    16.  
    17. def del_price(self, value):
    18. del self.original_price
    19.  
    20. PRICE = property(get_price, set_price, del_price, '
    相关教程