Python的property属性的使用方法

property

property 属性

class 类名:
    @property
    def 方法名(silf):
        return 返回值
    
 对象 = 类()
 变量 = 对象.方法名
 print(变量)

注:

  • 只能有一个参数self。注:两个参数则需要传值,但property的调用方法-对象.方法名默认不传值
  • 方法当做属性调。注:若使用对象名.方法名()的方式,则为一个"int"值的(),即"int"() 将报错
  • 直接得到方法的返回值 即函数的封装 (可用于分页)
  • 用property方法的优势,(即property属性调用时不需要传参)。注:使用return 调用函数也能得到值,但是需确定调用函数是否需要传值。

创建property属性的方法-装饰器

创建流程:

class Goods():
    @property  
    def price(self):
        print("@proterty")
        
    @price.setter
    def price(self,value):
        print("@proterty.setter")
        
     @price.deleter
    def price(self):
        print("@proterty.deleter")
        
 g = Goods()
 g.price  # 获取
 g.price = value  # 设置
 del g.price  # 删除

注:

  • 根据不同调用方法,调用不同的property方法
  • 三种方法的方法名需要相同
  • @property 获取
    @方法名.setter 设置
    @方法名.deleter 删除

应用01:

class Goods:
    def __init__(self):
        # 原价
        self.original_prince = 100
        # 折扣
        self.discount = 0.8

    @property
    def price(self):
        # 实际价格 = 原价 + 折扣
        new_price = self.original_prince *self.discount
        return new_price

    @price.setter
    def price(self,value):
        self.original_prince = value

    @price.deleter
    def price(self):
        del self.original_prince

obj = Goods()
print(obj.price) # 获取商品价格
obj.price = 200 # 修改商品原价
print(obj.price)
del obj.price # 删除商品原价
# print(obj.prince)

创建property属性的方法-类属性

创建流程:

class Foo:
    def get_bar(self):
        return "zhangsan"
        
    BAR = property(get_bar)
    
f = Foo()
reuslt = f.BAR # 自动调用get_bar方法,并获取方法的返回值
print(reuslt)

注:

  • property的作用是:简化代码
  • 方法名 = property(原获取方法名,原设置方法名,原删除方法名,字符串-返回信息)
  • 字符串通过对象.属性.__doc __ 调用

应用01:

#coding=utf-8class 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方法

应用02: 使用property升级getter和setter方法

class Money(object):
    def __init__(self):
        self.__money = 0

    def getMoney(self):
        return self.__money

    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")

    # 定义一个属性,当对这个money设置值时调用setMoney,当获取值时调用getMoney
    money = property(getMoney, setMoney)

a = Money()
a.money = 100  # 调用setMoney方法
print(a.money)  # 调用getMoney方法
#100

猜你喜欢

转载自blog.csdn.net/weixin_44850984/article/details/89813511
今日推荐