欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中property属性的概论和使用方法

程序员文章站 2022-05-29 08:13:05
property属性 概念: 定义一个方法但是使用装饰器property,只可以有一个self形参 可以用这样的属性动态的获取属性的值 定义方式(经典类) 定义方式(新式类) get @property 0 set @price.setter del @price.deleter` 使用proper ......

property属性

  • 概念:
    • 定义一个方法但是使用装饰器property,只可以有一个self形参
    • 可以用这样的属性动态的获取属性的值
  • 定义方式(经典类)
 class fun():
    @property
    def size(self):
        return 100

fun = fun()
print(fun.size)

100

  • 定义方式(新式类)
class fun():
    def __init__(self):
        self.num = 0
        
    @property
    def price(self):
        print("get @property")
        return self.num
        
    @price.setter
    def price(self, value):
        self.num = value
        print("set @price.setter")
    
    @price.deleter
    def price(self):
        print("del @price.deleter")
        
obj = fun()
print(obj.price)    # 可以获取价格,调用property装饰器
obj.price = 100     # 修改价格,调用price.setter装饰器
del obj.price       # 删除价格,调用price.deleter装饰器
get @property
0
set @price.setter
del @price.deleter`
  • 使用property方法来创建property属性

可以使用proerty来替代原有的封装的set和get方法

#coding=utf-8
class foo(object):
    def get_bar(self):
        print("getter...")
        return "laowang"

    def set_bar(self, value): 
        """必须两个参数"""
        print("setter...")
        return 'set value' + value

    def del_bar(self):
        print("deleter...")
        return "laowang"

    bar = property(get_bar, set_bar, del_bar, "description...")

obj = foo()

obj.bar  # 自动调用第一个参数中定义的方法:get_bar
obj.bar = "alex"  # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
desc = foo.bar.__doc__  # 自动获取第四个参数中设置的值:description...
print(desc)
del obj.bar  # 自动调用第三个参数中定义的方法:del_bar方法