愚公移山·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 * 变量名/函数/类 当前自己的类