愚公移山日记·39

愚公移山·39

两个月前,我再一个博客上学习到了装饰器property,当时就是云里雾里,根本搞不清楚,前几天我也学到自己写装饰器,但唯独没有学到property,今天终于学到了,而且有了之前自己写装饰器的经验,再接触property其实发现也并不是深奥的难以理解。

@property装饰方法

class Foo(object):
    # 初始化方法
    def __init__(self, num):
        self.num = num

    # 获取值的方法
    @property
    def prop(self):
        return self.num


# 创建对象
foo = Foo(100)
# 调用对象的方法
# print(foo.prop())
# foo.prop 之后 --->foo.prop()
# @property像使用属性一样使用函数
print(foo.prop)

@property实例

# @propertys实现分页
'''
类名 ;page
方法:
    初始化方法
    获取开始位置
    获取结束位置
'''


class Page(object):
    # 初始化方法
    def __init__(self,num):
        # 当前页
        self.current_page = num
        # 每页大小
        self.page_size = 10
    @property
    def start(self):
        # limit(当前页 -1 ) *每页大小 ,每页大小
        # 1,10
        # 11,20
        return (self.current_page - 1) * 10 + 1

    # 获取结束的位置
    @property
    def end(self):
        return self.current_page * self.page_size

# 创建类的对象
page = Page(10)
# 获取开始位置
# print(page.start())
print(page.start)
# 获取结束位置
print(page.start)
# print(page.end())

@property其他使用方法

'''
类:Goods
方法:
    初始化的方法
    获取价格的方法
    设置价格的方法
    删除价格的方法
'''


class Goods(object):
    # 初始化的方法
    def __init__(self):
        # 初始化一个原价
        self.org_prince = 1000
        # 初始化折扣
        self.discount = 0.7

    # 获取价格的方法
    @property
    def price(self):
        return self.org_prince * self.discount

    # 设置价格的方法
    @price.setter
    def price(self, val):
        if val > 0:
            self.org_prince = val

    # 删除价格的方法
    @price.deleter
    def price(self):
        print('执行了deleter 方法')


goods = Goods()
# goods.price == goods.price()
print(goods.price)
# goods.price == goods.price(500)
goods.price = 500
print(goods.price)

del goods.price

@property对象的类属性

class Foo(object):
    # get_bar方法
    def get_bar(self):
        return 'hhhhh'
    # property 对象
    # property (第一个参数,第二个参数,第三个参数,第四个参数)
    # 第一个参数:当我们 foo.BAR 自动调用第一个参数的方法
    # 第二个参数:当我们 foo.BAR = 100 自动调用第二个参数的方法
    # 第三个参数:当我们 del foo.BAR 自动调用第三个参数的方法
    # 第四个参数:当我们 Foo.BAR.__doc__, 自动调用第四个参数的内容
    BAR = property(get_bar)

foo = Foo()
# foo.get_bar == get_bar
print(foo.BAR)
# print(Foo.BAR)


# 类名与对象名不同
# 区别是带不带括号

@property对象的类属性2

class Goods(object):
    # 初始化的方法
    def __init__(self):
        # 初始化一个原价
        self.org_prince = 1000
        # 初始化折扣
        self.discount = 0.7

    # 获取价格的方法
    def get_price(self):
        return self.org_prince * self.discount

    # 设置价格的方法
    def set_price(self, val):
        if val > 0:
            self.org_prince = val

    # 删除价格的方法
    def del_price(self):
        print('执行了deleter 方法')

    BAR = property(get_price, set_price, del_price, 'BAR是也该property的一个对象')


if __name__ == '__main__':
    # 创建对象
    goods = Goods()
    # goods.BAR ==goods.get_price()
    print(goods.BAR)
    # 设置价格
    goods.BAR = 500
    # goods.BAR = 500 == goods.set_price(500)
    print(goods.BAR)
    # 删除价格
    del goods.BAR
    # del goods.BAR == @del_price.delet
    # 获取类描述
    print(Goods.BAR.__doc__)
    # Goods.BAR.__doc__ = Goods.__doc__

在此后还有import 和from。。imoprt 的区别*
import 模块:直接就是使用文件的变量名
from 模块 import * :*拷贝之后再使用
当我们多模块使用公共的文件,要使用import 模块

写法上的区别:
import 模块名.变量名/函数/类
from … import * 变量名/函数/类
底层的区别:
import 直接引用了源模块的 变量/函数/类
from … import * 变量名/函数/类 当前自己的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值